mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-16 05:58:32 -06:00
Update spread tests for booleans in spread types
This commit is contained in:
parent
60f1d4573d
commit
9cddd1aca2
@ -38,6 +38,13 @@ getter.a = 12;
|
||||
// functions result in { }
|
||||
let spreadFunc = { ...(function () { }) };
|
||||
|
||||
// boolean && T results in Partial<T>
|
||||
function conditionalSpread(b: boolean) : { x?: number | undefined, y?: number | undefined } {
|
||||
return { ...b && { x: 1, y: 2 } };
|
||||
}
|
||||
// other booleans result in { }
|
||||
let spreadBool = { ... true }
|
||||
|
||||
// any results in any
|
||||
let anything: any;
|
||||
let spreadAny = { ...anything };
|
||||
@ -60,21 +67,23 @@ let changeTypeBoth: { a: string, b: number } =
|
||||
{ ...o, ...swap };
|
||||
|
||||
// optional
|
||||
let definiteBoolean: { sn: boolean };
|
||||
let definiteString: { sn: string };
|
||||
let optionalString: { sn?: string };
|
||||
let optionalNumber: { sn?: number };
|
||||
let optionalUnionStops: { sn: string | number | boolean } = { ...definiteBoolean, ...definiteString, ...optionalNumber };
|
||||
let optionalUnionDuplicates: { sn: string | number } = { ...definiteBoolean, ...definiteString, ...optionalString, ...optionalNumber };
|
||||
let allOptional: { sn?: string | number } = { ...optionalString, ...optionalNumber };
|
||||
function container(
|
||||
definiteBoolean: { sn: boolean },
|
||||
definiteString: { sn: string },
|
||||
optionalString: { sn?: string },
|
||||
optionalNumber: { sn?: number }) {
|
||||
let optionalUnionStops: { sn: string | number | boolean } = { ...definiteBoolean, ...definiteString, ...optionalNumber };
|
||||
let optionalUnionDuplicates: { sn: string | number } = { ...definiteBoolean, ...definiteString, ...optionalString, ...optionalNumber };
|
||||
let allOptional: { sn?: string | number } = { ...optionalString, ...optionalNumber };
|
||||
|
||||
// computed property
|
||||
let computedFirst: { a: number, b: string, "before everything": number } =
|
||||
{ ['before everything']: 12, ...o, b: 'yes' }
|
||||
let computedMiddle: { a: number, b: string, c: boolean, "in the middle": number } =
|
||||
{ ...o, ['in the middle']: 13, b: 'maybe?', ...o2 }
|
||||
let computedAfter: { a: number, b: string, "at the end": number } =
|
||||
{ ...o, b: 'yeah', ['at the end']: 14 }
|
||||
// computed property
|
||||
let computedFirst: { a: number, b: string, "before everything": number } =
|
||||
{ ['before everything']: 12, ...o, b: 'yes' }
|
||||
let computedMiddle: { a: number, b: string, c: boolean, "in the middle": number } =
|
||||
{ ...o, ['in the middle']: 13, b: 'maybe?', ...o2 }
|
||||
let computedAfter: { a: number, b: string, "at the end": number } =
|
||||
{ ...o, b: 'yeah', ['at the end']: 14 }
|
||||
}
|
||||
// shortcut syntax
|
||||
let a = 12;
|
||||
let shortCutted: { a: number, b: string } = { ...o, a }
|
||||
@ -114,6 +123,12 @@ var getter = __assign({}, op, { c: 7 });
|
||||
getter.a = 12;
|
||||
// functions result in { }
|
||||
var spreadFunc = __assign({}, (function () { }));
|
||||
// boolean && T results in Partial<T>
|
||||
function conditionalSpread(b) {
|
||||
return __assign({}, b && { x: 1, y: 2 });
|
||||
}
|
||||
// other booleans result in { }
|
||||
var spreadBool = __assign({}, true);
|
||||
// any results in any
|
||||
var anything;
|
||||
var spreadAny = __assign({}, anything);
|
||||
@ -135,20 +150,18 @@ var changeTypeAfter = __assign({}, o, { a: 'wrong type?' });
|
||||
var changeTypeBefore = __assign({ a: 'wrong type?' }, o);
|
||||
var changeTypeBoth = __assign({}, o, swap);
|
||||
// optional
|
||||
var definiteBoolean;
|
||||
var definiteString;
|
||||
var optionalString;
|
||||
var optionalNumber;
|
||||
var optionalUnionStops = __assign({}, definiteBoolean, definiteString, optionalNumber);
|
||||
var optionalUnionDuplicates = __assign({}, definiteBoolean, definiteString, optionalString, optionalNumber);
|
||||
var allOptional = __assign({}, optionalString, optionalNumber);
|
||||
// computed property
|
||||
var computedFirst = __assign((_a = {}, _a['before everything'] = 12, _a), o, { b: 'yes' });
|
||||
var computedMiddle = __assign({}, o, (_b = {}, _b['in the middle'] = 13, _b.b = 'maybe?', _b), o2);
|
||||
var computedAfter = __assign({}, o, (_c = { b: 'yeah' }, _c['at the end'] = 14, _c));
|
||||
function container(definiteBoolean, definiteString, optionalString, optionalNumber) {
|
||||
var optionalUnionStops = __assign({}, definiteBoolean, definiteString, optionalNumber);
|
||||
var optionalUnionDuplicates = __assign({}, definiteBoolean, definiteString, optionalString, optionalNumber);
|
||||
var allOptional = __assign({}, optionalString, optionalNumber);
|
||||
// computed property
|
||||
var computedFirst = __assign((_a = {}, _a['before everything'] = 12, _a), o, { b: 'yes' });
|
||||
var computedMiddle = __assign({}, o, (_b = {}, _b['in the middle'] = 13, _b.b = 'maybe?', _b), o2);
|
||||
var computedAfter = __assign({}, o, (_c = { b: 'yeah' }, _c['at the end'] = 14, _c));
|
||||
var _a, _b, _c;
|
||||
}
|
||||
// shortcut syntax
|
||||
var a = 12;
|
||||
var shortCutted = __assign({}, o, { a: a });
|
||||
// non primitive
|
||||
var spreadNonPrimitive = __assign({}, {});
|
||||
var _a, _b, _c;
|
||||
|
||||
@ -169,154 +169,173 @@ getter.a = 12;
|
||||
let spreadFunc = { ...(function () { }) };
|
||||
>spreadFunc : Symbol(spreadFunc, Decl(objectSpread.ts, 37, 3))
|
||||
|
||||
// boolean && T results in Partial<T>
|
||||
function conditionalSpread(b: boolean) : { x?: number | undefined, y?: number | undefined } {
|
||||
>conditionalSpread : Symbol(conditionalSpread, Decl(objectSpread.ts, 37, 42))
|
||||
>b : Symbol(b, Decl(objectSpread.ts, 40, 27))
|
||||
>x : Symbol(x, Decl(objectSpread.ts, 40, 42))
|
||||
>y : Symbol(y, Decl(objectSpread.ts, 40, 66))
|
||||
|
||||
return { ...b && { x: 1, y: 2 } };
|
||||
>b : Symbol(b, Decl(objectSpread.ts, 40, 27))
|
||||
>x : Symbol(x, Decl(objectSpread.ts, 41, 22))
|
||||
>y : Symbol(y, Decl(objectSpread.ts, 41, 28))
|
||||
}
|
||||
// other booleans result in { }
|
||||
let spreadBool = { ... true }
|
||||
>spreadBool : Symbol(spreadBool, Decl(objectSpread.ts, 44, 3))
|
||||
|
||||
// any results in any
|
||||
let anything: any;
|
||||
>anything : Symbol(anything, Decl(objectSpread.ts, 40, 3))
|
||||
>anything : Symbol(anything, Decl(objectSpread.ts, 47, 3))
|
||||
|
||||
let spreadAny = { ...anything };
|
||||
>spreadAny : Symbol(spreadAny, Decl(objectSpread.ts, 41, 3))
|
||||
>anything : Symbol(anything, Decl(objectSpread.ts, 40, 3))
|
||||
>spreadAny : Symbol(spreadAny, Decl(objectSpread.ts, 48, 3))
|
||||
>anything : Symbol(anything, Decl(objectSpread.ts, 47, 3))
|
||||
|
||||
// methods are not enumerable
|
||||
class C { p = 1; m() { } }
|
||||
>C : Symbol(C, Decl(objectSpread.ts, 41, 32))
|
||||
>p : Symbol(C.p, Decl(objectSpread.ts, 44, 9))
|
||||
>m : Symbol(C.m, Decl(objectSpread.ts, 44, 16))
|
||||
>C : Symbol(C, Decl(objectSpread.ts, 48, 32))
|
||||
>p : Symbol(C.p, Decl(objectSpread.ts, 51, 9))
|
||||
>m : Symbol(C.m, Decl(objectSpread.ts, 51, 16))
|
||||
|
||||
let c: C = new C()
|
||||
>c : Symbol(c, Decl(objectSpread.ts, 45, 3))
|
||||
>C : Symbol(C, Decl(objectSpread.ts, 41, 32))
|
||||
>C : Symbol(C, Decl(objectSpread.ts, 41, 32))
|
||||
>c : Symbol(c, Decl(objectSpread.ts, 52, 3))
|
||||
>C : Symbol(C, Decl(objectSpread.ts, 48, 32))
|
||||
>C : Symbol(C, Decl(objectSpread.ts, 48, 32))
|
||||
|
||||
let spreadC: { p: number } = { ...c }
|
||||
>spreadC : Symbol(spreadC, Decl(objectSpread.ts, 46, 3))
|
||||
>p : Symbol(p, Decl(objectSpread.ts, 46, 14))
|
||||
>c : Symbol(c, Decl(objectSpread.ts, 45, 3))
|
||||
>spreadC : Symbol(spreadC, Decl(objectSpread.ts, 53, 3))
|
||||
>p : Symbol(p, Decl(objectSpread.ts, 53, 14))
|
||||
>c : Symbol(c, Decl(objectSpread.ts, 52, 3))
|
||||
|
||||
// own methods are enumerable
|
||||
let cplus: { p: number, plus(): void } = { ...c, plus() { return this.p + 1; } };
|
||||
>cplus : Symbol(cplus, Decl(objectSpread.ts, 49, 3))
|
||||
>p : Symbol(p, Decl(objectSpread.ts, 49, 12))
|
||||
>plus : Symbol(plus, Decl(objectSpread.ts, 49, 23))
|
||||
>c : Symbol(c, Decl(objectSpread.ts, 45, 3))
|
||||
>plus : Symbol(plus, Decl(objectSpread.ts, 49, 48))
|
||||
>cplus : Symbol(cplus, Decl(objectSpread.ts, 56, 3))
|
||||
>p : Symbol(p, Decl(objectSpread.ts, 56, 12))
|
||||
>plus : Symbol(plus, Decl(objectSpread.ts, 56, 23))
|
||||
>c : Symbol(c, Decl(objectSpread.ts, 52, 3))
|
||||
>plus : Symbol(plus, Decl(objectSpread.ts, 56, 48))
|
||||
|
||||
cplus.plus();
|
||||
>cplus.plus : Symbol(plus, Decl(objectSpread.ts, 49, 23))
|
||||
>cplus : Symbol(cplus, Decl(objectSpread.ts, 49, 3))
|
||||
>plus : Symbol(plus, Decl(objectSpread.ts, 49, 23))
|
||||
>cplus.plus : Symbol(plus, Decl(objectSpread.ts, 56, 23))
|
||||
>cplus : Symbol(cplus, Decl(objectSpread.ts, 56, 3))
|
||||
>plus : Symbol(plus, Decl(objectSpread.ts, 56, 23))
|
||||
|
||||
// new field's type conflicting with existing field is OK
|
||||
let changeTypeAfter: { a: string, b: string } =
|
||||
>changeTypeAfter : Symbol(changeTypeAfter, Decl(objectSpread.ts, 53, 3))
|
||||
>a : Symbol(a, Decl(objectSpread.ts, 53, 22))
|
||||
>b : Symbol(b, Decl(objectSpread.ts, 53, 33))
|
||||
>changeTypeAfter : Symbol(changeTypeAfter, Decl(objectSpread.ts, 60, 3))
|
||||
>a : Symbol(a, Decl(objectSpread.ts, 60, 22))
|
||||
>b : Symbol(b, Decl(objectSpread.ts, 60, 33))
|
||||
|
||||
{ ...o, a: 'wrong type?' }
|
||||
>o : Symbol(o, Decl(objectSpread.ts, 0, 3))
|
||||
>a : Symbol(a, Decl(objectSpread.ts, 54, 11))
|
||||
>a : Symbol(a, Decl(objectSpread.ts, 61, 11))
|
||||
|
||||
let changeTypeBefore: { a: number, b: string } =
|
||||
>changeTypeBefore : Symbol(changeTypeBefore, Decl(objectSpread.ts, 55, 3))
|
||||
>a : Symbol(a, Decl(objectSpread.ts, 55, 23))
|
||||
>b : Symbol(b, Decl(objectSpread.ts, 55, 34))
|
||||
>changeTypeBefore : Symbol(changeTypeBefore, Decl(objectSpread.ts, 62, 3))
|
||||
>a : Symbol(a, Decl(objectSpread.ts, 62, 23))
|
||||
>b : Symbol(b, Decl(objectSpread.ts, 62, 34))
|
||||
|
||||
{ a: 'wrong type?', ...o };
|
||||
>a : Symbol(a, Decl(objectSpread.ts, 56, 5))
|
||||
>a : Symbol(a, Decl(objectSpread.ts, 63, 5))
|
||||
>o : Symbol(o, Decl(objectSpread.ts, 0, 3))
|
||||
|
||||
let changeTypeBoth: { a: string, b: number } =
|
||||
>changeTypeBoth : Symbol(changeTypeBoth, Decl(objectSpread.ts, 57, 3))
|
||||
>a : Symbol(a, Decl(objectSpread.ts, 57, 21))
|
||||
>b : Symbol(b, Decl(objectSpread.ts, 57, 32))
|
||||
>changeTypeBoth : Symbol(changeTypeBoth, Decl(objectSpread.ts, 64, 3))
|
||||
>a : Symbol(a, Decl(objectSpread.ts, 64, 21))
|
||||
>b : Symbol(b, Decl(objectSpread.ts, 64, 32))
|
||||
|
||||
{ ...o, ...swap };
|
||||
>o : Symbol(o, Decl(objectSpread.ts, 0, 3))
|
||||
>swap : Symbol(swap, Decl(objectSpread.ts, 2, 3))
|
||||
|
||||
// optional
|
||||
let definiteBoolean: { sn: boolean };
|
||||
>definiteBoolean : Symbol(definiteBoolean, Decl(objectSpread.ts, 61, 3))
|
||||
>sn : Symbol(sn, Decl(objectSpread.ts, 61, 22))
|
||||
function container(
|
||||
>container : Symbol(container, Decl(objectSpread.ts, 65, 22))
|
||||
|
||||
let definiteString: { sn: string };
|
||||
>definiteString : Symbol(definiteString, Decl(objectSpread.ts, 62, 3))
|
||||
>sn : Symbol(sn, Decl(objectSpread.ts, 62, 21))
|
||||
definiteBoolean: { sn: boolean },
|
||||
>definiteBoolean : Symbol(definiteBoolean, Decl(objectSpread.ts, 68, 19))
|
||||
>sn : Symbol(sn, Decl(objectSpread.ts, 69, 22))
|
||||
|
||||
let optionalString: { sn?: string };
|
||||
>optionalString : Symbol(optionalString, Decl(objectSpread.ts, 63, 3))
|
||||
>sn : Symbol(sn, Decl(objectSpread.ts, 63, 21))
|
||||
definiteString: { sn: string },
|
||||
>definiteString : Symbol(definiteString, Decl(objectSpread.ts, 69, 37))
|
||||
>sn : Symbol(sn, Decl(objectSpread.ts, 70, 21))
|
||||
|
||||
let optionalNumber: { sn?: number };
|
||||
>optionalNumber : Symbol(optionalNumber, Decl(objectSpread.ts, 64, 3))
|
||||
>sn : Symbol(sn, Decl(objectSpread.ts, 64, 21))
|
||||
optionalString: { sn?: string },
|
||||
>optionalString : Symbol(optionalString, Decl(objectSpread.ts, 70, 35))
|
||||
>sn : Symbol(sn, Decl(objectSpread.ts, 71, 21))
|
||||
|
||||
let optionalUnionStops: { sn: string | number | boolean } = { ...definiteBoolean, ...definiteString, ...optionalNumber };
|
||||
>optionalUnionStops : Symbol(optionalUnionStops, Decl(objectSpread.ts, 65, 3))
|
||||
>sn : Symbol(sn, Decl(objectSpread.ts, 65, 25))
|
||||
>definiteBoolean : Symbol(definiteBoolean, Decl(objectSpread.ts, 61, 3))
|
||||
>definiteString : Symbol(definiteString, Decl(objectSpread.ts, 62, 3))
|
||||
>optionalNumber : Symbol(optionalNumber, Decl(objectSpread.ts, 64, 3))
|
||||
optionalNumber: { sn?: number }) {
|
||||
>optionalNumber : Symbol(optionalNumber, Decl(objectSpread.ts, 71, 36))
|
||||
>sn : Symbol(sn, Decl(objectSpread.ts, 72, 21))
|
||||
|
||||
let optionalUnionDuplicates: { sn: string | number } = { ...definiteBoolean, ...definiteString, ...optionalString, ...optionalNumber };
|
||||
>optionalUnionDuplicates : Symbol(optionalUnionDuplicates, Decl(objectSpread.ts, 66, 3))
|
||||
>sn : Symbol(sn, Decl(objectSpread.ts, 66, 30))
|
||||
>definiteBoolean : Symbol(definiteBoolean, Decl(objectSpread.ts, 61, 3))
|
||||
>definiteString : Symbol(definiteString, Decl(objectSpread.ts, 62, 3))
|
||||
>optionalString : Symbol(optionalString, Decl(objectSpread.ts, 63, 3))
|
||||
>optionalNumber : Symbol(optionalNumber, Decl(objectSpread.ts, 64, 3))
|
||||
let optionalUnionStops: { sn: string | number | boolean } = { ...definiteBoolean, ...definiteString, ...optionalNumber };
|
||||
>optionalUnionStops : Symbol(optionalUnionStops, Decl(objectSpread.ts, 73, 7))
|
||||
>sn : Symbol(sn, Decl(objectSpread.ts, 73, 29))
|
||||
>definiteBoolean : Symbol(definiteBoolean, Decl(objectSpread.ts, 68, 19))
|
||||
>definiteString : Symbol(definiteString, Decl(objectSpread.ts, 69, 37))
|
||||
>optionalNumber : Symbol(optionalNumber, Decl(objectSpread.ts, 71, 36))
|
||||
|
||||
let allOptional: { sn?: string | number } = { ...optionalString, ...optionalNumber };
|
||||
>allOptional : Symbol(allOptional, Decl(objectSpread.ts, 67, 3))
|
||||
>sn : Symbol(sn, Decl(objectSpread.ts, 67, 18))
|
||||
>optionalString : Symbol(optionalString, Decl(objectSpread.ts, 63, 3))
|
||||
>optionalNumber : Symbol(optionalNumber, Decl(objectSpread.ts, 64, 3))
|
||||
let optionalUnionDuplicates: { sn: string | number } = { ...definiteBoolean, ...definiteString, ...optionalString, ...optionalNumber };
|
||||
>optionalUnionDuplicates : Symbol(optionalUnionDuplicates, Decl(objectSpread.ts, 74, 7))
|
||||
>sn : Symbol(sn, Decl(objectSpread.ts, 74, 34))
|
||||
>definiteBoolean : Symbol(definiteBoolean, Decl(objectSpread.ts, 68, 19))
|
||||
>definiteString : Symbol(definiteString, Decl(objectSpread.ts, 69, 37))
|
||||
>optionalString : Symbol(optionalString, Decl(objectSpread.ts, 70, 35))
|
||||
>optionalNumber : Symbol(optionalNumber, Decl(objectSpread.ts, 71, 36))
|
||||
|
||||
// computed property
|
||||
let computedFirst: { a: number, b: string, "before everything": number } =
|
||||
>computedFirst : Symbol(computedFirst, Decl(objectSpread.ts, 70, 3))
|
||||
>a : Symbol(a, Decl(objectSpread.ts, 70, 20))
|
||||
>b : Symbol(b, Decl(objectSpread.ts, 70, 31))
|
||||
let allOptional: { sn?: string | number } = { ...optionalString, ...optionalNumber };
|
||||
>allOptional : Symbol(allOptional, Decl(objectSpread.ts, 75, 7))
|
||||
>sn : Symbol(sn, Decl(objectSpread.ts, 75, 22))
|
||||
>optionalString : Symbol(optionalString, Decl(objectSpread.ts, 70, 35))
|
||||
>optionalNumber : Symbol(optionalNumber, Decl(objectSpread.ts, 71, 36))
|
||||
|
||||
{ ['before everything']: 12, ...o, b: 'yes' }
|
||||
>'before everything' : Symbol(['before everything'], Decl(objectSpread.ts, 71, 5))
|
||||
// computed property
|
||||
let computedFirst: { a: number, b: string, "before everything": number } =
|
||||
>computedFirst : Symbol(computedFirst, Decl(objectSpread.ts, 78, 7))
|
||||
>a : Symbol(a, Decl(objectSpread.ts, 78, 24))
|
||||
>b : Symbol(b, Decl(objectSpread.ts, 78, 35))
|
||||
|
||||
{ ['before everything']: 12, ...o, b: 'yes' }
|
||||
>'before everything' : Symbol(['before everything'], Decl(objectSpread.ts, 79, 9))
|
||||
>o : Symbol(o, Decl(objectSpread.ts, 0, 3))
|
||||
>b : Symbol(b, Decl(objectSpread.ts, 71, 38))
|
||||
>b : Symbol(b, Decl(objectSpread.ts, 79, 42))
|
||||
|
||||
let computedMiddle: { a: number, b: string, c: boolean, "in the middle": number } =
|
||||
>computedMiddle : Symbol(computedMiddle, Decl(objectSpread.ts, 72, 3))
|
||||
>a : Symbol(a, Decl(objectSpread.ts, 72, 21))
|
||||
>b : Symbol(b, Decl(objectSpread.ts, 72, 32))
|
||||
>c : Symbol(c, Decl(objectSpread.ts, 72, 43))
|
||||
let computedMiddle: { a: number, b: string, c: boolean, "in the middle": number } =
|
||||
>computedMiddle : Symbol(computedMiddle, Decl(objectSpread.ts, 80, 7))
|
||||
>a : Symbol(a, Decl(objectSpread.ts, 80, 25))
|
||||
>b : Symbol(b, Decl(objectSpread.ts, 80, 36))
|
||||
>c : Symbol(c, Decl(objectSpread.ts, 80, 47))
|
||||
|
||||
{ ...o, ['in the middle']: 13, b: 'maybe?', ...o2 }
|
||||
{ ...o, ['in the middle']: 13, b: 'maybe?', ...o2 }
|
||||
>o : Symbol(o, Decl(objectSpread.ts, 0, 3))
|
||||
>'in the middle' : Symbol(['in the middle'], Decl(objectSpread.ts, 73, 11))
|
||||
>b : Symbol(b, Decl(objectSpread.ts, 73, 34))
|
||||
>'in the middle' : Symbol(['in the middle'], Decl(objectSpread.ts, 81, 15))
|
||||
>b : Symbol(b, Decl(objectSpread.ts, 81, 38))
|
||||
>o2 : Symbol(o2, Decl(objectSpread.ts, 1, 3))
|
||||
|
||||
let computedAfter: { a: number, b: string, "at the end": number } =
|
||||
>computedAfter : Symbol(computedAfter, Decl(objectSpread.ts, 74, 3))
|
||||
>a : Symbol(a, Decl(objectSpread.ts, 74, 20))
|
||||
>b : Symbol(b, Decl(objectSpread.ts, 74, 31))
|
||||
let computedAfter: { a: number, b: string, "at the end": number } =
|
||||
>computedAfter : Symbol(computedAfter, Decl(objectSpread.ts, 82, 7))
|
||||
>a : Symbol(a, Decl(objectSpread.ts, 82, 24))
|
||||
>b : Symbol(b, Decl(objectSpread.ts, 82, 35))
|
||||
|
||||
{ ...o, b: 'yeah', ['at the end']: 14 }
|
||||
{ ...o, b: 'yeah', ['at the end']: 14 }
|
||||
>o : Symbol(o, Decl(objectSpread.ts, 0, 3))
|
||||
>b : Symbol(b, Decl(objectSpread.ts, 75, 11))
|
||||
>'at the end' : Symbol(['at the end'], Decl(objectSpread.ts, 75, 22))
|
||||
|
||||
>b : Symbol(b, Decl(objectSpread.ts, 83, 15))
|
||||
>'at the end' : Symbol(['at the end'], Decl(objectSpread.ts, 83, 26))
|
||||
}
|
||||
// shortcut syntax
|
||||
let a = 12;
|
||||
>a : Symbol(a, Decl(objectSpread.ts, 77, 3))
|
||||
>a : Symbol(a, Decl(objectSpread.ts, 86, 3))
|
||||
|
||||
let shortCutted: { a: number, b: string } = { ...o, a }
|
||||
>shortCutted : Symbol(shortCutted, Decl(objectSpread.ts, 78, 3))
|
||||
>a : Symbol(a, Decl(objectSpread.ts, 78, 18))
|
||||
>b : Symbol(b, Decl(objectSpread.ts, 78, 29))
|
||||
>shortCutted : Symbol(shortCutted, Decl(objectSpread.ts, 87, 3))
|
||||
>a : Symbol(a, Decl(objectSpread.ts, 87, 18))
|
||||
>b : Symbol(b, Decl(objectSpread.ts, 87, 29))
|
||||
>o : Symbol(o, Decl(objectSpread.ts, 0, 3))
|
||||
>a : Symbol(a, Decl(objectSpread.ts, 78, 51))
|
||||
>a : Symbol(a, Decl(objectSpread.ts, 87, 51))
|
||||
|
||||
// non primitive
|
||||
let spreadNonPrimitive = { ...<object>{}};
|
||||
>spreadNonPrimitive : Symbol(spreadNonPrimitive, Decl(objectSpread.ts, 80, 3))
|
||||
>spreadNonPrimitive : Symbol(spreadNonPrimitive, Decl(objectSpread.ts, 89, 3))
|
||||
|
||||
|
||||
@ -230,6 +230,29 @@ let spreadFunc = { ...(function () { }) };
|
||||
>(function () { }) : () => void
|
||||
>function () { } : () => void
|
||||
|
||||
// boolean && T results in Partial<T>
|
||||
function conditionalSpread(b: boolean) : { x?: number | undefined, y?: number | undefined } {
|
||||
>conditionalSpread : (b: boolean) => { x?: number | undefined; y?: number | undefined; }
|
||||
>b : boolean
|
||||
>x : number | undefined
|
||||
>y : number | undefined
|
||||
|
||||
return { ...b && { x: 1, y: 2 } };
|
||||
>{ ...b && { x: 1, y: 2 } } : { x?: number | undefined; y?: number | undefined; }
|
||||
>b && { x: 1, y: 2 } : false | { x: number; y: number; }
|
||||
>b : boolean
|
||||
>{ x: 1, y: 2 } : { x: number; y: number; }
|
||||
>x : number
|
||||
>1 : 1
|
||||
>y : number
|
||||
>2 : 2
|
||||
}
|
||||
// other booleans result in { }
|
||||
let spreadBool = { ... true }
|
||||
>spreadBool : {}
|
||||
>{ ... true } : {}
|
||||
>true : true
|
||||
|
||||
// any results in any
|
||||
let anything: any;
|
||||
>anything : any
|
||||
@ -312,53 +335,56 @@ let changeTypeBoth: { a: string, b: number } =
|
||||
>swap : { a: string; b: number; }
|
||||
|
||||
// optional
|
||||
let definiteBoolean: { sn: boolean };
|
||||
function container(
|
||||
>container : (definiteBoolean: { sn: boolean; }, definiteString: { sn: string; }, optionalString: { sn?: string | undefined; }, optionalNumber: { sn?: number | undefined; }) => void
|
||||
|
||||
definiteBoolean: { sn: boolean },
|
||||
>definiteBoolean : { sn: boolean; }
|
||||
>sn : boolean
|
||||
|
||||
let definiteString: { sn: string };
|
||||
definiteString: { sn: string },
|
||||
>definiteString : { sn: string; }
|
||||
>sn : string
|
||||
|
||||
let optionalString: { sn?: string };
|
||||
>optionalString : { sn?: string; }
|
||||
>sn : string
|
||||
optionalString: { sn?: string },
|
||||
>optionalString : { sn?: string | undefined; }
|
||||
>sn : string | undefined
|
||||
|
||||
let optionalNumber: { sn?: number };
|
||||
>optionalNumber : { sn?: number; }
|
||||
>sn : number
|
||||
optionalNumber: { sn?: number }) {
|
||||
>optionalNumber : { sn?: number | undefined; }
|
||||
>sn : number | undefined
|
||||
|
||||
let optionalUnionStops: { sn: string | number | boolean } = { ...definiteBoolean, ...definiteString, ...optionalNumber };
|
||||
let optionalUnionStops: { sn: string | number | boolean } = { ...definiteBoolean, ...definiteString, ...optionalNumber };
|
||||
>optionalUnionStops : { sn: string | number | boolean; }
|
||||
>sn : string | number | boolean
|
||||
>{ ...definiteBoolean, ...definiteString, ...optionalNumber } : { sn: string | number; }
|
||||
>definiteBoolean : { sn: boolean; }
|
||||
>definiteString : { sn: string; }
|
||||
>optionalNumber : { sn?: number; }
|
||||
>optionalNumber : { sn?: number | undefined; }
|
||||
|
||||
let optionalUnionDuplicates: { sn: string | number } = { ...definiteBoolean, ...definiteString, ...optionalString, ...optionalNumber };
|
||||
let optionalUnionDuplicates: { sn: string | number } = { ...definiteBoolean, ...definiteString, ...optionalString, ...optionalNumber };
|
||||
>optionalUnionDuplicates : { sn: string | number; }
|
||||
>sn : string | number
|
||||
>{ ...definiteBoolean, ...definiteString, ...optionalString, ...optionalNumber } : { sn: string | number; }
|
||||
>definiteBoolean : { sn: boolean; }
|
||||
>definiteString : { sn: string; }
|
||||
>optionalString : { sn?: string; }
|
||||
>optionalNumber : { sn?: number; }
|
||||
>optionalString : { sn?: string | undefined; }
|
||||
>optionalNumber : { sn?: number | undefined; }
|
||||
|
||||
let allOptional: { sn?: string | number } = { ...optionalString, ...optionalNumber };
|
||||
>allOptional : { sn?: string | number; }
|
||||
>sn : string | number
|
||||
>{ ...optionalString, ...optionalNumber } : { sn?: string | number; }
|
||||
>optionalString : { sn?: string; }
|
||||
>optionalNumber : { sn?: number; }
|
||||
let allOptional: { sn?: string | number } = { ...optionalString, ...optionalNumber };
|
||||
>allOptional : { sn?: string | number | undefined; }
|
||||
>sn : string | number | undefined
|
||||
>{ ...optionalString, ...optionalNumber } : { sn?: string | number | undefined; }
|
||||
>optionalString : { sn?: string | undefined; }
|
||||
>optionalNumber : { sn?: number | undefined; }
|
||||
|
||||
// computed property
|
||||
let computedFirst: { a: number, b: string, "before everything": number } =
|
||||
// computed property
|
||||
let computedFirst: { a: number, b: string, "before everything": number } =
|
||||
>computedFirst : { a: number; b: string; "before everything": number; }
|
||||
>a : number
|
||||
>b : string
|
||||
|
||||
{ ['before everything']: 12, ...o, b: 'yes' }
|
||||
{ ['before everything']: 12, ...o, b: 'yes' }
|
||||
>{ ['before everything']: 12, ...o, b: 'yes' } : { b: string; a: number; ['before everything']: number; }
|
||||
>'before everything' : "before everything"
|
||||
>12 : 12
|
||||
@ -366,13 +392,13 @@ let computedFirst: { a: number, b: string, "before everything": number } =
|
||||
>b : string
|
||||
>'yes' : "yes"
|
||||
|
||||
let computedMiddle: { a: number, b: string, c: boolean, "in the middle": number } =
|
||||
let computedMiddle: { a: number, b: string, c: boolean, "in the middle": number } =
|
||||
>computedMiddle : { a: number; b: string; c: boolean; "in the middle": number; }
|
||||
>a : number
|
||||
>b : string
|
||||
>c : boolean
|
||||
|
||||
{ ...o, ['in the middle']: 13, b: 'maybe?', ...o2 }
|
||||
{ ...o, ['in the middle']: 13, b: 'maybe?', ...o2 }
|
||||
>{ ...o, ['in the middle']: 13, b: 'maybe?', ...o2 } : { b: string; c: boolean; ['in the middle']: number; a: number; }
|
||||
>o : { a: number; b: string; }
|
||||
>'in the middle' : "in the middle"
|
||||
@ -381,19 +407,19 @@ let computedMiddle: { a: number, b: string, c: boolean, "in the middle": number
|
||||
>'maybe?' : "maybe?"
|
||||
>o2 : { b: string; c: boolean; }
|
||||
|
||||
let computedAfter: { a: number, b: string, "at the end": number } =
|
||||
let computedAfter: { a: number, b: string, "at the end": number } =
|
||||
>computedAfter : { a: number; b: string; "at the end": number; }
|
||||
>a : number
|
||||
>b : string
|
||||
|
||||
{ ...o, b: 'yeah', ['at the end']: 14 }
|
||||
{ ...o, b: 'yeah', ['at the end']: 14 }
|
||||
>{ ...o, b: 'yeah', ['at the end']: 14 } : { b: string; ['at the end']: number; a: number; }
|
||||
>o : { a: number; b: string; }
|
||||
>b : string
|
||||
>'yeah' : "yeah"
|
||||
>'at the end' : "at the end"
|
||||
>14 : 14
|
||||
|
||||
}
|
||||
// shortcut syntax
|
||||
let a = 12;
|
||||
>a : number
|
||||
|
||||
@ -9,23 +9,22 @@ tests/cases/conformance/types/spread/objectSpreadNegative.ts(28,36): error TS230
|
||||
tests/cases/conformance/types/spread/objectSpreadNegative.ts(28,53): error TS2300: Duplicate identifier 'b'.
|
||||
tests/cases/conformance/types/spread/objectSpreadNegative.ts(32,19): error TS2698: Spread types may only be created from object types.
|
||||
tests/cases/conformance/types/spread/objectSpreadNegative.ts(33,19): error TS2698: Spread types may only be created from object types.
|
||||
tests/cases/conformance/types/spread/objectSpreadNegative.ts(35,20): error TS2698: Spread types may only be created from object types.
|
||||
tests/cases/conformance/types/spread/objectSpreadNegative.ts(37,19): error TS2698: Spread types may only be created from object types.
|
||||
tests/cases/conformance/types/spread/objectSpreadNegative.ts(42,1): error TS2349: Cannot invoke an expression whose type lacks a call signature. Type '{}' has no compatible call signatures.
|
||||
tests/cases/conformance/types/spread/objectSpreadNegative.ts(46,12): error TS2339: Property 'b' does not exist on type '{}'.
|
||||
tests/cases/conformance/types/spread/objectSpreadNegative.ts(52,9): error TS2339: Property 'm' does not exist on type '{ p: number; }'.
|
||||
tests/cases/conformance/types/spread/objectSpreadNegative.ts(57,11): error TS2339: Property 'a' does not exist on type '{}'.
|
||||
tests/cases/conformance/types/spread/objectSpreadNegative.ts(34,19): error TS2698: Spread types may only be created from object types.
|
||||
tests/cases/conformance/types/spread/objectSpreadNegative.ts(39,1): error TS2349: Cannot invoke an expression whose type lacks a call signature. Type '{}' has no compatible call signatures.
|
||||
tests/cases/conformance/types/spread/objectSpreadNegative.ts(43,12): error TS2339: Property 'b' does not exist on type '{}'.
|
||||
tests/cases/conformance/types/spread/objectSpreadNegative.ts(49,9): error TS2339: Property 'm' does not exist on type '{ p: number; }'.
|
||||
tests/cases/conformance/types/spread/objectSpreadNegative.ts(54,11): error TS2339: Property 'a' does not exist on type '{}'.
|
||||
tests/cases/conformance/types/spread/objectSpreadNegative.ts(58,14): error TS2698: Spread types may only be created from object types.
|
||||
tests/cases/conformance/types/spread/objectSpreadNegative.ts(61,14): error TS2698: Spread types may only be created from object types.
|
||||
tests/cases/conformance/types/spread/objectSpreadNegative.ts(64,14): error TS2698: Spread types may only be created from object types.
|
||||
tests/cases/conformance/types/spread/objectSpreadNegative.ts(78,37): error TS2322: Type '{ a: string; b: string; extra: string; }' is not assignable to type 'A'.
|
||||
tests/cases/conformance/types/spread/objectSpreadNegative.ts(75,37): error TS2322: Type '{ a: string; b: string; extra: string; }' is not assignable to type 'A'.
|
||||
Object literal may only specify known properties, and 'extra' does not exist in type 'A'.
|
||||
tests/cases/conformance/types/spread/objectSpreadNegative.ts(81,7): error TS2322: Type '{ a: string; b: string; extra: string; }' is not assignable to type 'A'.
|
||||
tests/cases/conformance/types/spread/objectSpreadNegative.ts(78,7): error TS2322: Type '{ a: string; b: string; extra: string; }' is not assignable to type 'A'.
|
||||
Object literal may only specify known properties, and 'extra' does not exist in type 'A'.
|
||||
tests/cases/conformance/types/spread/objectSpreadNegative.ts(83,7): error TS2322: Type '{ a: string; b: string; extra: string; }' is not assignable to type 'A'.
|
||||
tests/cases/conformance/types/spread/objectSpreadNegative.ts(80,7): error TS2322: Type '{ a: string; b: string; extra: string; }' is not assignable to type 'A'.
|
||||
Object literal may only specify known properties, and 'extra' does not exist in type 'A'.
|
||||
|
||||
|
||||
==== tests/cases/conformance/types/spread/objectSpreadNegative.ts (19 errors) ====
|
||||
==== tests/cases/conformance/types/spread/objectSpreadNegative.ts (18 errors) ====
|
||||
let o = { a: 1, b: 'no' }
|
||||
|
||||
/// private propagates
|
||||
@ -78,11 +77,6 @@ tests/cases/conformance/types/spread/objectSpreadNegative.ts(83,7): error TS2322
|
||||
let spreadSum = { ...1 + 1 };
|
||||
~~~~~~~~
|
||||
!!! error TS2698: Spread types may only be created from object types.
|
||||
spreadSum.toFixed(); // error, no methods from number
|
||||
let spreadBool = { ...false };
|
||||
~~~~~~~~
|
||||
!!! error TS2698: Spread types may only be created from object types.
|
||||
spreadBool.valueOf(); // error, what were you thinking?
|
||||
let spreadStr = { ...'foo' };
|
||||
~~~~~~~~
|
||||
!!! error TS2698: Spread types may only be created from object types.
|
||||
|
||||
@ -32,9 +32,6 @@ let duplicatedSpread = { ...o, ...o }
|
||||
// primitives are not allowed
|
||||
let spreadNum = { ...12 };
|
||||
let spreadSum = { ...1 + 1 };
|
||||
spreadSum.toFixed(); // error, no methods from number
|
||||
let spreadBool = { ...false };
|
||||
spreadBool.valueOf(); // error, what were you thinking?
|
||||
let spreadStr = { ...'foo' };
|
||||
spreadStr.length; // error, no 'length'
|
||||
spreadStr.charAt(1); // error, no methods either
|
||||
@ -124,9 +121,6 @@ var duplicatedSpread = __assign({}, o, o);
|
||||
// primitives are not allowed
|
||||
var spreadNum = __assign({}, 12);
|
||||
var spreadSum = __assign({}, 1 + 1);
|
||||
spreadSum.toFixed(); // error, no methods from number
|
||||
var spreadBool = __assign({}, false);
|
||||
spreadBool.valueOf(); // error, what were you thinking?
|
||||
var spreadStr = __assign({}, 'foo');
|
||||
spreadStr.length; // error, no 'length'
|
||||
spreadStr.charAt(1); // error, no methods either
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
// @strictNullChecks: true
|
||||
// @target: es5
|
||||
let o = { a: 1, b: 'no' }
|
||||
let o2 = { b: 'yes', c: true }
|
||||
@ -38,6 +39,13 @@ getter.a = 12;
|
||||
// functions result in { }
|
||||
let spreadFunc = { ...(function () { }) };
|
||||
|
||||
// boolean && T results in Partial<T>
|
||||
function conditionalSpread(b: boolean) : { x?: number | undefined, y?: number | undefined } {
|
||||
return { ...b && { x: 1, y: 2 } };
|
||||
}
|
||||
// other booleans result in { }
|
||||
let spreadBool = { ... true }
|
||||
|
||||
// any results in any
|
||||
let anything: any;
|
||||
let spreadAny = { ...anything };
|
||||
@ -60,21 +68,23 @@ let changeTypeBoth: { a: string, b: number } =
|
||||
{ ...o, ...swap };
|
||||
|
||||
// optional
|
||||
let definiteBoolean: { sn: boolean };
|
||||
let definiteString: { sn: string };
|
||||
let optionalString: { sn?: string };
|
||||
let optionalNumber: { sn?: number };
|
||||
let optionalUnionStops: { sn: string | number | boolean } = { ...definiteBoolean, ...definiteString, ...optionalNumber };
|
||||
let optionalUnionDuplicates: { sn: string | number } = { ...definiteBoolean, ...definiteString, ...optionalString, ...optionalNumber };
|
||||
let allOptional: { sn?: string | number } = { ...optionalString, ...optionalNumber };
|
||||
function container(
|
||||
definiteBoolean: { sn: boolean },
|
||||
definiteString: { sn: string },
|
||||
optionalString: { sn?: string },
|
||||
optionalNumber: { sn?: number }) {
|
||||
let optionalUnionStops: { sn: string | number | boolean } = { ...definiteBoolean, ...definiteString, ...optionalNumber };
|
||||
let optionalUnionDuplicates: { sn: string | number } = { ...definiteBoolean, ...definiteString, ...optionalString, ...optionalNumber };
|
||||
let allOptional: { sn?: string | number } = { ...optionalString, ...optionalNumber };
|
||||
|
||||
// computed property
|
||||
let computedFirst: { a: number, b: string, "before everything": number } =
|
||||
{ ['before everything']: 12, ...o, b: 'yes' }
|
||||
let computedMiddle: { a: number, b: string, c: boolean, "in the middle": number } =
|
||||
{ ...o, ['in the middle']: 13, b: 'maybe?', ...o2 }
|
||||
let computedAfter: { a: number, b: string, "at the end": number } =
|
||||
{ ...o, b: 'yeah', ['at the end']: 14 }
|
||||
// computed property
|
||||
let computedFirst: { a: number, b: string, "before everything": number } =
|
||||
{ ['before everything']: 12, ...o, b: 'yes' }
|
||||
let computedMiddle: { a: number, b: string, c: boolean, "in the middle": number } =
|
||||
{ ...o, ['in the middle']: 13, b: 'maybe?', ...o2 }
|
||||
let computedAfter: { a: number, b: string, "at the end": number } =
|
||||
{ ...o, b: 'yeah', ['at the end']: 14 }
|
||||
}
|
||||
// shortcut syntax
|
||||
let a = 12;
|
||||
let shortCutted: { a: number, b: string } = { ...o, a }
|
||||
|
||||
@ -32,9 +32,6 @@ let duplicatedSpread = { ...o, ...o }
|
||||
// primitives are not allowed
|
||||
let spreadNum = { ...12 };
|
||||
let spreadSum = { ...1 + 1 };
|
||||
spreadSum.toFixed(); // error, no methods from number
|
||||
let spreadBool = { ...false };
|
||||
spreadBool.valueOf(); // error, what were you thinking?
|
||||
let spreadStr = { ...'foo' };
|
||||
spreadStr.length; // error, no 'length'
|
||||
spreadStr.charAt(1); // error, no methods either
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user