diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 8c1e401912d18..b59e4eae60709 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -2974,7 +2974,9 @@ namespace ts { if (strictNullChecks && declaration.initializer && !(getFalsyFlags(checkExpressionCached(declaration.initializer)) & TypeFlags.Undefined)) { type = getTypeWithFacts(type, TypeFacts.NEUndefined); } - return type; + return declaration.initializer ? + getUnionType([type, checkExpressionCached(declaration.initializer)], /*subtypeReduction*/ true) : + type; } function getTypeForVariableLikeDeclarationFromJSDocComment(declaration: VariableLikeDeclaration) { @@ -13462,7 +13464,7 @@ namespace ts { return maybeTypeOfKind(contextualType, (TypeFlags.NumberLiteral | TypeFlags.EnumLiteral)); } if (type.flags & TypeFlags.Boolean) { - return maybeTypeOfKind(contextualType, TypeFlags.BooleanLiteral) && !isTypeAssignableTo(booleanType, contextualType); + return maybeTypeOfKind(contextualType, TypeFlags.BooleanLiteral); } if (type.flags & TypeFlags.Enum) { return typeContainsLiteralFromEnum(contextualType, type); diff --git a/tests/baselines/reference/amdImportNotAsPrimaryExpression.types b/tests/baselines/reference/amdImportNotAsPrimaryExpression.types index 5d90a8dadc243..9d9faf05af806 100644 --- a/tests/baselines/reference/amdImportNotAsPrimaryExpression.types +++ b/tests/baselines/reference/amdImportNotAsPrimaryExpression.types @@ -28,7 +28,7 @@ var y: typeof foo.C1.s1 = false; >foo : typeof foo >C1 : typeof foo.C1 >s1 : boolean ->false : boolean +>false : false var z: foo.M1.I2; >z : f.I2 diff --git a/tests/baselines/reference/arrayBestCommonTypes.types b/tests/baselines/reference/arrayBestCommonTypes.types index 2e87dc2ca15e8..0b4a871cd40ac 100644 --- a/tests/baselines/reference/arrayBestCommonTypes.types +++ b/tests/baselines/reference/arrayBestCommonTypes.types @@ -255,16 +255,16 @@ module EmptyTypes { >x : boolean >y : base >base : base ->[{ x: true, y: new derived() }, { x: false, y: new base() }] : { x: boolean; y: derived; }[] ->{ x: true, y: new derived() } : { x: boolean; y: derived; } ->x : boolean ->true : boolean +>[{ x: true, y: new derived() }, { x: false, y: new base() }] : ({ x: true; y: derived; } | { x: false; y: base; })[] +>{ x: true, y: new derived() } : { x: true; y: derived; } +>x : true +>true : true >y : derived >new derived() : derived >derived : typeof derived ->{ x: false, y: new base() } : { x: boolean; y: base; } ->x : boolean ->false : boolean +>{ x: false, y: new base() } : { x: false; y: base; } +>x : false +>false : false >y : base >new base() : base >base : typeof base @@ -658,16 +658,16 @@ module NonEmptyTypes { >x : boolean >y : base >base : base ->[{ x: true, y: new derived() }, { x: false, y: new base() }] : { x: boolean; y: base; }[] ->{ x: true, y: new derived() } : { x: boolean; y: derived; } ->x : boolean ->true : boolean +>[{ x: true, y: new derived() }, { x: false, y: new base() }] : ({ x: true; y: derived; } | { x: false; y: base; })[] +>{ x: true, y: new derived() } : { x: true; y: derived; } +>x : true +>true : true >y : derived >new derived() : derived >derived : typeof derived ->{ x: false, y: new base() } : { x: boolean; y: base; } ->x : boolean ->false : boolean +>{ x: false, y: new base() } : { x: false; y: base; } +>x : false +>false : false >y : base >new base() : base >base : typeof base diff --git a/tests/baselines/reference/assignmentTypeNarrowing.types b/tests/baselines/reference/assignmentTypeNarrowing.types index be99a31501d06..f46b2a16c3b5e 100644 --- a/tests/baselines/reference/assignmentTypeNarrowing.types +++ b/tests/baselines/reference/assignmentTypeNarrowing.types @@ -12,14 +12,14 @@ x; // string >x : string [x] = [true]; ->[x] = [true] : [boolean] +>[x] = [true] : [true] >[x] : [string | number | boolean | RegExp] >x : string | number | boolean | RegExp ->[true] : [boolean] ->true : boolean +>[true] : [true] +>true : true x; // boolean ->x : boolean +>x : true [x = ""] = [1]; >[x = ""] = [1] : [number] @@ -34,16 +34,16 @@ x; // string | number >x : string | number ({x} = {x: true}); ->({x} = {x: true}) : { x: boolean; } ->{x} = {x: true} : { x: boolean; } +>({x} = {x: true}) : { x: true; } +>{x} = {x: true} : { x: true; } >{x} : { x: string | number | boolean | RegExp; } >x : string | number | boolean | RegExp ->{x: true} : { x: boolean; } ->x : boolean ->true : boolean +>{x: true} : { x: true; } +>x : true +>true : true x; // boolean ->x : boolean +>x : true ({y: x} = {y: 1}); >({y: x} = {y: 1}) : { y: number; } @@ -59,16 +59,16 @@ x; // number >x : number ({x = ""} = {x: true}); ->({x = ""} = {x: true}) : { x?: boolean; } ->{x = ""} = {x: true} : { x?: boolean; } +>({x = ""} = {x: true}) : { x?: true; } +>{x = ""} = {x: true} : { x?: true; } >{x = ""} : { x?: string | number | boolean | RegExp; } >x : string | number | boolean | RegExp ->{x: true} : { x?: boolean; } ->x : boolean ->true : boolean +>{x: true} : { x?: true; } +>x : true +>true : true x; // string | boolean ->x : string | boolean +>x : string | true ({y: x = /a/} = {y: 1}); >({y: x = /a/} = {y: 1}) : { y?: number; } diff --git a/tests/baselines/reference/asyncFunctionReturnType.types b/tests/baselines/reference/asyncFunctionReturnType.types index c6289ab012d5e..f848f7e154627 100644 --- a/tests/baselines/reference/asyncFunctionReturnType.types +++ b/tests/baselines/reference/asyncFunctionReturnType.types @@ -15,8 +15,8 @@ async function fAsyncExplicit(): Promise<[number, boolean]> { // This is contextually typed as a tuple. return [1, true]; ->[1, true] : [number, boolean] +>[1, true] : [number, true] >1 : number ->true : boolean +>true : true } diff --git a/tests/baselines/reference/bestCommonTypeOfTuple.types b/tests/baselines/reference/bestCommonTypeOfTuple.types index 6aa84f37ebac6..02c504b6ec35e 100644 --- a/tests/baselines/reference/bestCommonTypeOfTuple.types +++ b/tests/baselines/reference/bestCommonTypeOfTuple.types @@ -12,7 +12,7 @@ function f2(x: number): number { return 10; } function f3(x: number): boolean { return true; } >f3 : (x: number) => boolean >x : number ->true : boolean +>true : true enum E1 { one } >E1 : E1 diff --git a/tests/baselines/reference/bitwiseNotOperatorWithBooleanType.types b/tests/baselines/reference/bitwiseNotOperatorWithBooleanType.types index 234c01e224141..34e2b31a7e896 100644 --- a/tests/baselines/reference/bitwiseNotOperatorWithBooleanType.types +++ b/tests/baselines/reference/bitwiseNotOperatorWithBooleanType.types @@ -5,7 +5,7 @@ var BOOLEAN: boolean; function foo(): boolean { return true; } >foo : () => boolean ->true : boolean +>true : true class A { >A : A diff --git a/tests/baselines/reference/castTest.types b/tests/baselines/reference/castTest.types index 35698219fd43f..03e119d17eda0 100644 --- a/tests/baselines/reference/castTest.types +++ b/tests/baselines/reference/castTest.types @@ -23,7 +23,7 @@ var a = 0; var b = true; >b : boolean >true : boolean ->true : boolean +>true : true var s = ""; >s : string diff --git a/tests/baselines/reference/checkSuperCallBeforeThisAccessing3.types b/tests/baselines/reference/checkSuperCallBeforeThisAccessing3.types index c4e9e15ed8ef2..a26ca2a6d7972 100644 --- a/tests/baselines/reference/checkSuperCallBeforeThisAccessing3.types +++ b/tests/baselines/reference/checkSuperCallBeforeThisAccessing3.types @@ -18,11 +18,11 @@ class Derived extends Based { constructor() { this.y = true; ->this.y = true : boolean +>this.y = true : true >this.y : boolean >this : this >y : boolean ->true : boolean +>true : true } } super(); diff --git a/tests/baselines/reference/commaOperatorWithSecondOperandBooleanType.types b/tests/baselines/reference/commaOperatorWithSecondOperandBooleanType.types index dba5285d88095..b846d2cd56b2f 100644 --- a/tests/baselines/reference/commaOperatorWithSecondOperandBooleanType.types +++ b/tests/baselines/reference/commaOperatorWithSecondOperandBooleanType.types @@ -111,32 +111,32 @@ ANY = undefined, BOOLEAN; >BOOLEAN : boolean OBJECT = [1, 2, 3], BOOLEAN = false; ->OBJECT = [1, 2, 3], BOOLEAN = false : boolean +>OBJECT = [1, 2, 3], BOOLEAN = false : false >OBJECT = [1, 2, 3] : number[] >OBJECT : Object >[1, 2, 3] : number[] >1 : number >2 : number >3 : number ->BOOLEAN = false : boolean +>BOOLEAN = false : false >BOOLEAN : boolean ->false : boolean +>false : false var resultIsBoolean6 = (null, BOOLEAN); ->resultIsBoolean6 : boolean ->(null, BOOLEAN) : boolean ->null, BOOLEAN : boolean +>resultIsBoolean6 : false +>(null, BOOLEAN) : false +>null, BOOLEAN : false >null : null ->BOOLEAN : boolean +>BOOLEAN : false var resultIsBoolean7 = (ANY = undefined, BOOLEAN); ->resultIsBoolean7 : boolean ->(ANY = undefined, BOOLEAN) : boolean ->ANY = undefined, BOOLEAN : boolean +>resultIsBoolean7 : false +>(ANY = undefined, BOOLEAN) : false +>ANY = undefined, BOOLEAN : false >ANY = undefined : undefined >ANY : any >undefined : undefined ->BOOLEAN : boolean +>BOOLEAN : false var resultIsBoolean8 = (1, true); >resultIsBoolean8 : boolean @@ -154,27 +154,27 @@ var resultIsBoolean9 = (++NUMBER, true); >true : boolean var resultIsBoolean10 = ([1, 2, 3], !BOOLEAN); ->resultIsBoolean10 : boolean ->([1, 2, 3], !BOOLEAN) : boolean ->[1, 2, 3], !BOOLEAN : boolean +>resultIsBoolean10 : true +>([1, 2, 3], !BOOLEAN) : true +>[1, 2, 3], !BOOLEAN : true >[1, 2, 3] : number[] >1 : number >2 : number >3 : number ->!BOOLEAN : boolean ->BOOLEAN : boolean +>!BOOLEAN : true +>BOOLEAN : false var resultIsBoolean11 = (OBJECT = [1, 2, 3], BOOLEAN = false); ->resultIsBoolean11 : boolean ->(OBJECT = [1, 2, 3], BOOLEAN = false) : boolean ->OBJECT = [1, 2, 3], BOOLEAN = false : boolean +>resultIsBoolean11 : false +>(OBJECT = [1, 2, 3], BOOLEAN = false) : false +>OBJECT = [1, 2, 3], BOOLEAN = false : false >OBJECT = [1, 2, 3] : number[] >OBJECT : Object >[1, 2, 3] : number[] >1 : number >2 : number >3 : number ->BOOLEAN = false : boolean +>BOOLEAN = false : false >BOOLEAN : boolean ->false : boolean +>false : false diff --git a/tests/baselines/reference/commaOperatorWithSecondOperandNumberType.types b/tests/baselines/reference/commaOperatorWithSecondOperandNumberType.types index 13aae51e0cb33..7706cc554411e 100644 --- a/tests/baselines/reference/commaOperatorWithSecondOperandNumberType.types +++ b/tests/baselines/reference/commaOperatorWithSecondOperandNumberType.types @@ -97,9 +97,9 @@ true, 1; BOOLEAN = false, 1; >BOOLEAN = false, 1 : number ->BOOLEAN = false : boolean +>BOOLEAN = false : false >BOOLEAN : boolean ->false : boolean +>false : false >1 : number "", NUMBER = 1; @@ -146,9 +146,9 @@ var resultIsNumber9 = (BOOLEAN = false, 1); >resultIsNumber9 : number >(BOOLEAN = false, 1) : number >BOOLEAN = false, 1 : number ->BOOLEAN = false : boolean +>BOOLEAN = false : false >BOOLEAN : boolean ->false : boolean +>false : false >1 : number var resultIsNumber10 = ("", NUMBER = 1); diff --git a/tests/baselines/reference/commonJSImportNotAsPrimaryExpression.types b/tests/baselines/reference/commonJSImportNotAsPrimaryExpression.types index 5d90a8dadc243..9d9faf05af806 100644 --- a/tests/baselines/reference/commonJSImportNotAsPrimaryExpression.types +++ b/tests/baselines/reference/commonJSImportNotAsPrimaryExpression.types @@ -28,7 +28,7 @@ var y: typeof foo.C1.s1 = false; >foo : typeof foo >C1 : typeof foo.C1 >s1 : boolean ->false : boolean +>false : false var z: foo.M1.I2; >z : f.I2 diff --git a/tests/baselines/reference/compoundAdditionAssignmentWithInvalidOperands.errors.txt b/tests/baselines/reference/compoundAdditionAssignmentWithInvalidOperands.errors.txt index 45be0c3129fa8..2bc8a82ed3b5d 100644 --- a/tests/baselines/reference/compoundAdditionAssignmentWithInvalidOperands.errors.txt +++ b/tests/baselines/reference/compoundAdditionAssignmentWithInvalidOperands.errors.txt @@ -1,5 +1,5 @@ tests/cases/conformance/expressions/assignmentOperator/compoundAdditionAssignmentWithInvalidOperands.ts(6,1): error TS2365: Operator '+=' cannot be applied to types 'boolean' and 'void'. -tests/cases/conformance/expressions/assignmentOperator/compoundAdditionAssignmentWithInvalidOperands.ts(7,1): error TS2365: Operator '+=' cannot be applied to types 'boolean' and 'boolean'. +tests/cases/conformance/expressions/assignmentOperator/compoundAdditionAssignmentWithInvalidOperands.ts(7,1): error TS2365: Operator '+=' cannot be applied to types 'boolean' and 'true'. tests/cases/conformance/expressions/assignmentOperator/compoundAdditionAssignmentWithInvalidOperands.ts(8,1): error TS2365: Operator '+=' cannot be applied to types 'boolean' and 'number'. tests/cases/conformance/expressions/assignmentOperator/compoundAdditionAssignmentWithInvalidOperands.ts(9,1): error TS2365: Operator '+=' cannot be applied to types 'boolean' and 'E'. tests/cases/conformance/expressions/assignmentOperator/compoundAdditionAssignmentWithInvalidOperands.ts(10,1): error TS2365: Operator '+=' cannot be applied to types 'boolean' and '{}'. @@ -38,7 +38,7 @@ tests/cases/conformance/expressions/assignmentOperator/compoundAdditionAssignmen !!! error TS2365: Operator '+=' cannot be applied to types 'boolean' and 'void'. x1 += true; ~~~~~~~~~~ -!!! error TS2365: Operator '+=' cannot be applied to types 'boolean' and 'boolean'. +!!! error TS2365: Operator '+=' cannot be applied to types 'boolean' and 'true'. x1 += 0; ~~~~~~~ !!! error TS2365: Operator '+=' cannot be applied to types 'boolean' and 'number'. diff --git a/tests/baselines/reference/computedPropertyNamesContextualType6_ES5.types b/tests/baselines/reference/computedPropertyNamesContextualType6_ES5.types index e5b7440f49e62..564689ffdeb5a 100644 --- a/tests/baselines/reference/computedPropertyNamesContextualType6_ES5.types +++ b/tests/baselines/reference/computedPropertyNamesContextualType6_ES5.types @@ -19,7 +19,7 @@ declare function foo(obj: I): T foo({ >foo({ p: "", 0: () => { }, ["hi" + "bye"]: true, [0 + 1]: 0, [+"hi"]: [0]}) : string | number | boolean | (() => void) | number[] >foo : (obj: I) => T ->{ p: "", 0: () => { }, ["hi" + "bye"]: true, [0 + 1]: 0, [+"hi"]: [0]} : { [x: string]: string | number | boolean | (() => void) | number[]; [x: number]: number | (() => void) | number[]; 0: () => void; p: string; } +>{ p: "", 0: () => { }, ["hi" + "bye"]: true, [0 + 1]: 0, [+"hi"]: [0]} : { [x: string]: string | number | true | (() => void) | number[]; [x: number]: number | (() => void) | number[]; 0: () => void; p: string; } p: "", >p : string @@ -32,7 +32,7 @@ foo({ >"hi" + "bye" : string >"hi" : string >"bye" : string ->true : boolean +>true : true [0 + 1]: 0, >0 + 1 : number diff --git a/tests/baselines/reference/computedPropertyNamesContextualType6_ES6.types b/tests/baselines/reference/computedPropertyNamesContextualType6_ES6.types index 71498d7f3d4ad..a771faba97e5a 100644 --- a/tests/baselines/reference/computedPropertyNamesContextualType6_ES6.types +++ b/tests/baselines/reference/computedPropertyNamesContextualType6_ES6.types @@ -19,7 +19,7 @@ declare function foo(obj: I): T foo({ >foo({ p: "", 0: () => { }, ["hi" + "bye"]: true, [0 + 1]: 0, [+"hi"]: [0]}) : string | number | boolean | (() => void) | number[] >foo : (obj: I) => T ->{ p: "", 0: () => { }, ["hi" + "bye"]: true, [0 + 1]: 0, [+"hi"]: [0]} : { [x: string]: string | number | boolean | (() => void) | number[]; [x: number]: number | (() => void) | number[]; 0: () => void; p: string; } +>{ p: "", 0: () => { }, ["hi" + "bye"]: true, [0 + 1]: 0, [+"hi"]: [0]} : { [x: string]: string | number | true | (() => void) | number[]; [x: number]: number | (() => void) | number[]; 0: () => void; p: string; } p: "", >p : string @@ -32,7 +32,7 @@ foo({ >"hi" + "bye" : string >"hi" : string >"bye" : string ->true : boolean +>true : true [0 + 1]: 0, >0 + 1 : number diff --git a/tests/baselines/reference/conditionalOperatorConditionIsBooleanType.types b/tests/baselines/reference/conditionalOperatorConditionIsBooleanType.types index ec3bd526e9e4b..7733b80f69b7c 100644 --- a/tests/baselines/reference/conditionalOperatorConditionIsBooleanType.types +++ b/tests/baselines/reference/conditionalOperatorConditionIsBooleanType.types @@ -146,7 +146,7 @@ true || false ? exprIsObject1 : exprIsObject2; >true || false ? exprIsObject1 : exprIsObject2 : Object >true || false : boolean >true : boolean ->false : boolean +>false : false >exprIsObject1 : Object >exprIsObject2 : Object @@ -291,7 +291,7 @@ var resultIsObject3 = true || false ? exprIsObject1 : exprIsObject2; >true || false ? exprIsObject1 : exprIsObject2 : Object >true || false : boolean >true : boolean ->false : boolean +>false : false >exprIsObject1 : Object >exprIsObject2 : Object diff --git a/tests/baselines/reference/constEnumPropertyAccess1.types b/tests/baselines/reference/constEnumPropertyAccess1.types index f0e00fe771771..e32ae5a64491f 100644 --- a/tests/baselines/reference/constEnumPropertyAccess1.types +++ b/tests/baselines/reference/constEnumPropertyAccess1.types @@ -35,10 +35,10 @@ var o: { >idx : number } = { ->{ 1: true } : { 1: boolean; } +>{ 1: true } : { 1: true; } 1: true ->true : boolean +>true : true }; diff --git a/tests/baselines/reference/contextuallyTypedBindingInitializerNegative.errors.txt b/tests/baselines/reference/contextuallyTypedBindingInitializerNegative.errors.txt deleted file mode 100644 index 447ccec5ddf91..0000000000000 --- a/tests/baselines/reference/contextuallyTypedBindingInitializerNegative.errors.txt +++ /dev/null @@ -1,67 +0,0 @@ -tests/cases/conformance/types/contextualTypes/methodDeclarations/contextuallyTypedBindingInitializerNegative.ts(4,20): error TS2322: Type '(v: number) => number' is not assignable to type '(x: number) => string'. - Type 'number' is not assignable to type 'string'. -tests/cases/conformance/types/contextualTypes/methodDeclarations/contextuallyTypedBindingInitializerNegative.ts(5,23): error TS2322: Type '(v: number) => number' is not assignable to type '(x: number) => string'. - Type 'number' is not assignable to type 'string'. -tests/cases/conformance/types/contextualTypes/methodDeclarations/contextuallyTypedBindingInitializerNegative.ts(6,25): error TS2322: Type '(v: number) => number' is not assignable to type '(x: number) => string'. - Type 'number' is not assignable to type 'string'. -tests/cases/conformance/types/contextualTypes/methodDeclarations/contextuallyTypedBindingInitializerNegative.ts(11,23): error TS2322: Type '{ show: (v: number) => number; }' is not assignable to type 'Show'. - Types of property 'show' are incompatible. - Type '(v: number) => number' is not assignable to type '(x: number) => string'. - Type 'number' is not assignable to type 'string'. -tests/cases/conformance/types/contextualTypes/methodDeclarations/contextuallyTypedBindingInitializerNegative.ts(16,23): error TS2322: Type '(arg: string) => number' is not assignable to type '(s: string) => string'. - Type 'number' is not assignable to type 'string'. -tests/cases/conformance/types/contextualTypes/methodDeclarations/contextuallyTypedBindingInitializerNegative.ts(21,14): error TS2322: Type '[number, number]' is not assignable to type '[string, number]'. - Type 'number' is not assignable to type 'string'. -tests/cases/conformance/types/contextualTypes/methodDeclarations/contextuallyTypedBindingInitializerNegative.ts(26,14): error TS2322: Type '"baz"' is not assignable to type '"foo" | "bar"'. - - -==== tests/cases/conformance/types/contextualTypes/methodDeclarations/contextuallyTypedBindingInitializerNegative.ts (7 errors) ==== - interface Show { - show: (x: number) => string; - } - function f({ show: showRename = v => v }: Show) {} - ~~~~~~~~~~ -!!! error TS2322: Type '(v: number) => number' is not assignable to type '(x: number) => string'. -!!! error TS2322: Type 'number' is not assignable to type 'string'. - function f2({ "show": showRename = v => v }: Show) {} - ~~~~~~~~~~ -!!! error TS2322: Type '(v: number) => number' is not assignable to type '(x: number) => string'. -!!! error TS2322: Type 'number' is not assignable to type 'string'. - function f3({ ["show"]: showRename = v => v }: Show) {} - ~~~~~~~~~~ -!!! error TS2322: Type '(v: number) => number' is not assignable to type '(x: number) => string'. -!!! error TS2322: Type 'number' is not assignable to type 'string'. - - interface Nested { - nested: Show - } - function ff({ nested: nestedRename = { show: v => v } }: Nested) {} - ~~~~~~~~~~~~ -!!! error TS2322: Type '{ show: (v: number) => number; }' is not assignable to type 'Show'. -!!! error TS2322: Types of property 'show' are incompatible. -!!! error TS2322: Type '(v: number) => number' is not assignable to type '(x: number) => string'. -!!! error TS2322: Type 'number' is not assignable to type 'string'. - - interface StringIdentity { - stringIdentity(s: string): string; - } - let { stringIdentity: id = arg => arg.length }: StringIdentity = { stringIdentity: x => x}; - ~~ -!!! error TS2322: Type '(arg: string) => number' is not assignable to type '(s: string) => string'. -!!! error TS2322: Type 'number' is not assignable to type 'string'. - - interface Tuples { - prop: [string, number]; - } - function g({ prop = [101, 1234] }: Tuples) {} - ~~~~ -!!! error TS2322: Type '[number, number]' is not assignable to type '[string, number]'. -!!! error TS2322: Type 'number' is not assignable to type 'string'. - - interface StringUnion { - prop: "foo" | "bar"; - } - function h({ prop = "baz" }: StringUnion) {} - ~~~~ -!!! error TS2322: Type '"baz"' is not assignable to type '"foo" | "bar"'. - \ No newline at end of file diff --git a/tests/baselines/reference/contextuallyTypedBindingInitializerNegative.symbols b/tests/baselines/reference/contextuallyTypedBindingInitializerNegative.symbols new file mode 100644 index 0000000000000..a9013e7f98e24 --- /dev/null +++ b/tests/baselines/reference/contextuallyTypedBindingInitializerNegative.symbols @@ -0,0 +1,88 @@ +=== tests/cases/conformance/types/contextualTypes/methodDeclarations/contextuallyTypedBindingInitializerNegative.ts === +interface Show { +>Show : Symbol(Show, Decl(contextuallyTypedBindingInitializerNegative.ts, 0, 0)) + + show: (x: number) => string; +>show : Symbol(Show.show, Decl(contextuallyTypedBindingInitializerNegative.ts, 0, 16)) +>x : Symbol(x, Decl(contextuallyTypedBindingInitializerNegative.ts, 1, 11)) +} +function f({ show: showRename = v => v }: Show) {} +>f : Symbol(f, Decl(contextuallyTypedBindingInitializerNegative.ts, 2, 1)) +>show : Symbol(Show.show, Decl(contextuallyTypedBindingInitializerNegative.ts, 0, 16)) +>showRename : Symbol(showRename, Decl(contextuallyTypedBindingInitializerNegative.ts, 3, 12)) +>v : Symbol(v, Decl(contextuallyTypedBindingInitializerNegative.ts, 3, 31)) +>v : Symbol(v, Decl(contextuallyTypedBindingInitializerNegative.ts, 3, 31)) +>Show : Symbol(Show, Decl(contextuallyTypedBindingInitializerNegative.ts, 0, 0)) + +function f2({ "show": showRename = v => v }: Show) {} +>f2 : Symbol(f2, Decl(contextuallyTypedBindingInitializerNegative.ts, 3, 50)) +>showRename : Symbol(showRename, Decl(contextuallyTypedBindingInitializerNegative.ts, 4, 13)) +>v : Symbol(v, Decl(contextuallyTypedBindingInitializerNegative.ts, 4, 34)) +>v : Symbol(v, Decl(contextuallyTypedBindingInitializerNegative.ts, 4, 34)) +>Show : Symbol(Show, Decl(contextuallyTypedBindingInitializerNegative.ts, 0, 0)) + +function f3({ ["show"]: showRename = v => v }: Show) {} +>f3 : Symbol(f3, Decl(contextuallyTypedBindingInitializerNegative.ts, 4, 53)) +>"show" : Symbol(showRename, Decl(contextuallyTypedBindingInitializerNegative.ts, 5, 13)) +>showRename : Symbol(showRename, Decl(contextuallyTypedBindingInitializerNegative.ts, 5, 13)) +>v : Symbol(v, Decl(contextuallyTypedBindingInitializerNegative.ts, 5, 36)) +>v : Symbol(v, Decl(contextuallyTypedBindingInitializerNegative.ts, 5, 36)) +>Show : Symbol(Show, Decl(contextuallyTypedBindingInitializerNegative.ts, 0, 0)) + +interface Nested { +>Nested : Symbol(Nested, Decl(contextuallyTypedBindingInitializerNegative.ts, 5, 55)) + + nested: Show +>nested : Symbol(Nested.nested, Decl(contextuallyTypedBindingInitializerNegative.ts, 7, 18)) +>Show : Symbol(Show, Decl(contextuallyTypedBindingInitializerNegative.ts, 0, 0)) +} +function ff({ nested: nestedRename = { show: v => v } }: Nested) {} +>ff : Symbol(ff, Decl(contextuallyTypedBindingInitializerNegative.ts, 9, 1)) +>nested : Symbol(Nested.nested, Decl(contextuallyTypedBindingInitializerNegative.ts, 7, 18)) +>nestedRename : Symbol(nestedRename, Decl(contextuallyTypedBindingInitializerNegative.ts, 10, 13)) +>show : Symbol(show, Decl(contextuallyTypedBindingInitializerNegative.ts, 10, 38)) +>v : Symbol(v, Decl(contextuallyTypedBindingInitializerNegative.ts, 10, 44)) +>v : Symbol(v, Decl(contextuallyTypedBindingInitializerNegative.ts, 10, 44)) +>Nested : Symbol(Nested, Decl(contextuallyTypedBindingInitializerNegative.ts, 5, 55)) + +interface StringIdentity { +>StringIdentity : Symbol(StringIdentity, Decl(contextuallyTypedBindingInitializerNegative.ts, 10, 67)) + + stringIdentity(s: string): string; +>stringIdentity : Symbol(StringIdentity.stringIdentity, Decl(contextuallyTypedBindingInitializerNegative.ts, 12, 26)) +>s : Symbol(s, Decl(contextuallyTypedBindingInitializerNegative.ts, 13, 19)) +} +let { stringIdentity: id = arg => arg.length }: StringIdentity = { stringIdentity: x => x}; +>stringIdentity : Symbol(StringIdentity.stringIdentity, Decl(contextuallyTypedBindingInitializerNegative.ts, 12, 26)) +>id : Symbol(id, Decl(contextuallyTypedBindingInitializerNegative.ts, 15, 5)) +>arg : Symbol(arg, Decl(contextuallyTypedBindingInitializerNegative.ts, 15, 26)) +>arg.length : Symbol(String.length, Decl(lib.d.ts, --, --)) +>arg : Symbol(arg, Decl(contextuallyTypedBindingInitializerNegative.ts, 15, 26)) +>length : Symbol(String.length, Decl(lib.d.ts, --, --)) +>StringIdentity : Symbol(StringIdentity, Decl(contextuallyTypedBindingInitializerNegative.ts, 10, 67)) +>stringIdentity : Symbol(stringIdentity, Decl(contextuallyTypedBindingInitializerNegative.ts, 15, 66)) +>x : Symbol(x, Decl(contextuallyTypedBindingInitializerNegative.ts, 15, 82)) +>x : Symbol(x, Decl(contextuallyTypedBindingInitializerNegative.ts, 15, 82)) + +interface Tuples { +>Tuples : Symbol(Tuples, Decl(contextuallyTypedBindingInitializerNegative.ts, 15, 91)) + + prop: [string, number]; +>prop : Symbol(Tuples.prop, Decl(contextuallyTypedBindingInitializerNegative.ts, 17, 18)) +} +function g({ prop = [101, 1234] }: Tuples) {} +>g : Symbol(g, Decl(contextuallyTypedBindingInitializerNegative.ts, 19, 1)) +>prop : Symbol(prop, Decl(contextuallyTypedBindingInitializerNegative.ts, 20, 12)) +>Tuples : Symbol(Tuples, Decl(contextuallyTypedBindingInitializerNegative.ts, 15, 91)) + +interface StringUnion { +>StringUnion : Symbol(StringUnion, Decl(contextuallyTypedBindingInitializerNegative.ts, 20, 45)) + + prop: "foo" | "bar"; +>prop : Symbol(StringUnion.prop, Decl(contextuallyTypedBindingInitializerNegative.ts, 22, 23)) +} +function h({ prop = "baz" }: StringUnion) {} +>h : Symbol(h, Decl(contextuallyTypedBindingInitializerNegative.ts, 24, 1)) +>prop : Symbol(prop, Decl(contextuallyTypedBindingInitializerNegative.ts, 25, 12)) +>StringUnion : Symbol(StringUnion, Decl(contextuallyTypedBindingInitializerNegative.ts, 20, 45)) + diff --git a/tests/baselines/reference/contextuallyTypedBindingInitializerNegative.types b/tests/baselines/reference/contextuallyTypedBindingInitializerNegative.types new file mode 100644 index 0000000000000..7e922332055f4 --- /dev/null +++ b/tests/baselines/reference/contextuallyTypedBindingInitializerNegative.types @@ -0,0 +1,100 @@ +=== tests/cases/conformance/types/contextualTypes/methodDeclarations/contextuallyTypedBindingInitializerNegative.ts === +interface Show { +>Show : Show + + show: (x: number) => string; +>show : (x: number) => string +>x : number +} +function f({ show: showRename = v => v }: Show) {} +>f : ({show: showRename}: Show) => void +>show : any +>showRename : ((x: number) => string) | ((v: number) => number) +>v => v : (v: number) => number +>v : number +>v : number +>Show : Show + +function f2({ "show": showRename = v => v }: Show) {} +>f2 : ({"show": showRename}: Show) => void +>showRename : ((x: number) => string) | ((v: number) => number) +>v => v : (v: number) => number +>v : number +>v : number +>Show : Show + +function f3({ ["show"]: showRename = v => v }: Show) {} +>f3 : ({["show"]: showRename}: Show) => void +>"show" : string +>showRename : ((x: number) => string) | ((v: number) => number) +>v => v : (v: number) => number +>v : number +>v : number +>Show : Show + +interface Nested { +>Nested : Nested + + nested: Show +>nested : Show +>Show : Show +} +function ff({ nested: nestedRename = { show: v => v } }: Nested) {} +>ff : ({nested: nestedRename}: Nested) => void +>nested : any +>nestedRename : Show | { show: (v: number) => number; } +>{ show: v => v } : { show: (v: number) => number; } +>show : (v: number) => number +>v => v : (v: number) => number +>v : number +>v : number +>Nested : Nested + +interface StringIdentity { +>StringIdentity : StringIdentity + + stringIdentity(s: string): string; +>stringIdentity : (s: string) => string +>s : string +} +let { stringIdentity: id = arg => arg.length }: StringIdentity = { stringIdentity: x => x}; +>stringIdentity : any +>id : ((s: string) => string) | ((arg: string) => number) +>arg => arg.length : (arg: string) => number +>arg : string +>arg.length : number +>arg : string +>length : number +>StringIdentity : StringIdentity +>{ stringIdentity: x => x} : { stringIdentity: (x: string) => string; } +>stringIdentity : (x: string) => string +>x => x : (x: string) => string +>x : string +>x : string + +interface Tuples { +>Tuples : Tuples + + prop: [string, number]; +>prop : [string, number] +} +function g({ prop = [101, 1234] }: Tuples) {} +>g : ({prop}: Tuples) => void +>prop : [string, number] | [number, number] +>[101, 1234] : [number, number] +>101 : number +>1234 : number +>Tuples : Tuples + +interface StringUnion { +>StringUnion : StringUnion + + prop: "foo" | "bar"; +>prop : "foo" | "bar" +} +function h({ prop = "baz" }: StringUnion) {} +>h : ({prop}: StringUnion) => void +>prop : "foo" | "bar" | "baz" +>"baz" : "baz" +>StringUnion : StringUnion + diff --git a/tests/baselines/reference/contextuallyTypedIife.types b/tests/baselines/reference/contextuallyTypedIife.types index 8777e3cef3f95..2f12e543356ff 100644 --- a/tests/baselines/reference/contextuallyTypedIife.types +++ b/tests/baselines/reference/contextuallyTypedIife.types @@ -43,7 +43,7 @@ >c : boolean >"foo" : string >101 : number ->false : boolean +>false : false // default parameters ((m = 10) => m + 1)(12); diff --git a/tests/baselines/reference/controlFlowAssignmentExpression.types b/tests/baselines/reference/controlFlowAssignmentExpression.types index 107fb4cb332ec..94e71b1fd2ad3 100644 --- a/tests/baselines/reference/controlFlowAssignmentExpression.types +++ b/tests/baselines/reference/controlFlowAssignmentExpression.types @@ -21,9 +21,9 @@ x; // number >x : number x = true; ->x = true : boolean +>x = true : true >x : string | number | boolean ->true : boolean +>true : true (x = "", obj).foo = (x = x.length); >(x = "", obj).foo = (x = x.length) : number diff --git a/tests/baselines/reference/controlFlowCommaOperator.types b/tests/baselines/reference/controlFlowCommaOperator.types index 211fae3655a14..8df5b8e7889a6 100644 --- a/tests/baselines/reference/controlFlowCommaOperator.types +++ b/tests/baselines/reference/controlFlowCommaOperator.types @@ -5,11 +5,11 @@ function f(x: string | number | boolean) { let y: string | number | boolean = false; >y : string | number | boolean ->false : boolean +>false : false let z: string | number | boolean = false; >z : string | number | boolean ->false : boolean +>false : false if (y = "", typeof x === "string") { >y = "", typeof x === "string" : boolean @@ -28,7 +28,7 @@ function f(x: string | number | boolean) { >y : string z; // boolean ->z : boolean +>z : false } else if (z = 1, typeof x === "number") { >z = 1, typeof x === "number" : boolean @@ -66,6 +66,6 @@ function f(x: string | number | boolean) { >y : string z; // number | boolean ->z : number | boolean +>z : number | false } diff --git a/tests/baselines/reference/controlFlowDoWhileStatement.types b/tests/baselines/reference/controlFlowDoWhileStatement.types index 55329cbcea1d5..d7916f51dfb2e 100644 --- a/tests/baselines/reference/controlFlowDoWhileStatement.types +++ b/tests/baselines/reference/controlFlowDoWhileStatement.types @@ -155,9 +155,9 @@ function f() { >cond : boolean x = true; ->x = true : boolean +>x = true : true >x : string | number | boolean | Function | RegExp ->true : boolean +>true : true continue; } @@ -170,7 +170,7 @@ function f() { >cond : boolean x; // number | boolean | RegExp ->x : number | boolean | RegExp +>x : number | true | RegExp } function g() { >g : () => void @@ -200,9 +200,9 @@ function g() { >cond : boolean x = true; ->x = true : boolean +>x = true : true >x : string | number | boolean | Function | RegExp ->true : boolean +>true : true continue; } diff --git a/tests/baselines/reference/controlFlowForInStatement.types b/tests/baselines/reference/controlFlowForInStatement.types index cab3a70160231..1930071aeb559 100644 --- a/tests/baselines/reference/controlFlowForInStatement.types +++ b/tests/baselines/reference/controlFlowForInStatement.types @@ -38,13 +38,13 @@ for (let y in obj) { >cond : boolean x = true; ->x = true : boolean +>x = true : true >x : string | number | boolean | Function | RegExp ->true : boolean +>true : true break; } } x; // RegExp | string | number | boolean ->x : string | number | boolean | RegExp +>x : string | number | true | RegExp diff --git a/tests/baselines/reference/controlFlowForOfStatement.types b/tests/baselines/reference/controlFlowForOfStatement.types index 41e312347e798..91e0d0a57588a 100644 --- a/tests/baselines/reference/controlFlowForOfStatement.types +++ b/tests/baselines/reference/controlFlowForOfStatement.types @@ -10,9 +10,9 @@ function a() { >a : () => void x = true; ->x = true : boolean +>x = true : true >x : string | number | boolean | RegExp ->true : boolean +>true : true for (x of obj) { >x : string | number | boolean | RegExp @@ -27,6 +27,6 @@ function a() { >toExponential : (fractionDigits?: number) => string } x; // string | boolean ->x : string | boolean +>x : string | true } diff --git a/tests/baselines/reference/controlFlowForStatement.types b/tests/baselines/reference/controlFlowForStatement.types index d0b0a2e6b8a11..c16ee4f45ec92 100644 --- a/tests/baselines/reference/controlFlowForStatement.types +++ b/tests/baselines/reference/controlFlowForStatement.types @@ -108,16 +108,16 @@ function e() { >0 : number >typeof x !== "string" : boolean >typeof x : string ->x : string | number | boolean +>x : string | number | true >"string" : "string" ->x = "" || true : string | boolean +>x = "" || true : string | true >x : string | number | boolean | RegExp ->"" || true : string | boolean +>"" || true : string | true >"" : string ->true : boolean +>true : true x; // number | boolean ->x : number | boolean +>x : number | true } } function f() { diff --git a/tests/baselines/reference/controlFlowIfStatement.types b/tests/baselines/reference/controlFlowIfStatement.types index 79985378bf5bd..fe609d98fb459 100644 --- a/tests/baselines/reference/controlFlowIfStatement.types +++ b/tests/baselines/reference/controlFlowIfStatement.types @@ -12,12 +12,12 @@ x = /a/; >/a/ : RegExp if (x /* RegExp */, (x = true)) { ->x /* RegExp */, (x = true) : boolean +>x /* RegExp */, (x = true) : true >x : RegExp ->(x = true) : boolean ->x = true : boolean +>(x = true) : true +>x = true : true >x : string | number | boolean | RegExp ->true : boolean +>true : true x; // boolean >x : true @@ -29,7 +29,7 @@ if (x /* RegExp */, (x = true)) { } else { x; // boolean ->x : boolean +>x : true x = 42; >x = 42 : number diff --git a/tests/baselines/reference/controlFlowWhileStatement.types b/tests/baselines/reference/controlFlowWhileStatement.types index 8caae2238d229..09a127ab51ea5 100644 --- a/tests/baselines/reference/controlFlowWhileStatement.types +++ b/tests/baselines/reference/controlFlowWhileStatement.types @@ -161,9 +161,9 @@ function f() { >cond : true x = true; ->x = true : boolean +>x = true : true >x : string | number | boolean | Function | RegExp ->true : boolean +>true : true continue; } @@ -173,7 +173,7 @@ function f() { >/a/ : RegExp } x; // string | number | boolean | RegExp ->x : string | number | boolean | RegExp +>x : string | number | true | RegExp } function g() { >g : () => void @@ -205,9 +205,9 @@ function g() { >cond : boolean x = true; ->x = true : boolean +>x = true : true >x : string | number | boolean | Function | RegExp ->true : boolean +>true : true continue; } diff --git a/tests/baselines/reference/declFileFunctions.types b/tests/baselines/reference/declFileFunctions.types index 9ad974463b7ac..87840f39430a0 100644 --- a/tests/baselines/reference/declFileFunctions.types +++ b/tests/baselines/reference/declFileFunctions.types @@ -66,7 +66,7 @@ export function fooWithTypePredicate(a: any): a is number { >a : any return true; ->true : boolean +>true : true } export function fooWithTypePredicateAndMulitpleParams(a: any, b: any, c: any): a is number { >fooWithTypePredicateAndMulitpleParams : (a: any, b: any, c: any) => a is number @@ -76,7 +76,7 @@ export function fooWithTypePredicateAndMulitpleParams(a: any, b: any, c: any): a >a : any return true; ->true : boolean +>true : true } export function fooWithTypeTypePredicateAndGeneric(a: any): a is T { >fooWithTypeTypePredicateAndGeneric : (a: any) => a is T @@ -86,7 +86,7 @@ export function fooWithTypeTypePredicateAndGeneric(a: any): a is T { >T : T return true; ->true : boolean +>true : true } export function fooWithTypeTypePredicateAndRestParam(a: any, ...rest): a is number { >fooWithTypeTypePredicateAndRestParam : (a: any, ...rest: any[]) => a is number @@ -95,7 +95,7 @@ export function fooWithTypeTypePredicateAndRestParam(a: any, ...rest): a is numb >a : any return true; ->true : boolean +>true : true } /** This comment should appear for nonExportedFoo*/ diff --git a/tests/baselines/reference/declFileTypeAnnotationBuiltInType.types b/tests/baselines/reference/declFileTypeAnnotationBuiltInType.types index a1b2d9edd4362..2e187f0ec837e 100644 --- a/tests/baselines/reference/declFileTypeAnnotationBuiltInType.types +++ b/tests/baselines/reference/declFileTypeAnnotationBuiltInType.types @@ -33,7 +33,7 @@ function foo5(): boolean { >foo5 : () => boolean return true; ->true : boolean +>true : true } function foo6() { >foo6 : () => boolean diff --git a/tests/baselines/reference/declarationsAndAssignments.errors.txt b/tests/baselines/reference/declarationsAndAssignments.errors.txt index 3ed9e241c3992..4aa81dce7ae20 100644 --- a/tests/baselines/reference/declarationsAndAssignments.errors.txt +++ b/tests/baselines/reference/declarationsAndAssignments.errors.txt @@ -5,7 +5,7 @@ tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(23,25): tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(24,19): error TS2353: Object literal may only specify known properties, and 'x' does not exist in type '{ y: any; }'. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(28,28): error TS2353: Object literal may only specify known properties, and 'y' does not exist in type '{ x: any; }'. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(29,22): error TS2353: Object literal may only specify known properties, and 'x' does not exist in type '{ y: any; }'. -tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(56,17): error TS2322: Type 'number' is not assignable to type 'string'. +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(58,9): error TS2403: Subsequent variable declarations must have the same type. Variable 'y' must be of type 'string | number', but here has type 'string'. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(62,10): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(62,13): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(62,16): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. @@ -17,10 +17,10 @@ tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(73,11): tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(73,14): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(74,11): error TS2459: Type 'undefined[]' has no property 'a' and no string index signature. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(74,14): error TS2459: Type 'undefined[]' has no property 'b' and no string index signature. -tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(106,5): error TS2345: Argument of type '[number, [string, { y: boolean; }]]' is not assignable to parameter of type '[number, [string, { x: any; y?: boolean; }]]'. - Type '[string, { y: boolean; }]' is not assignable to type '[string, { x: any; y?: boolean; }]'. - Type '{ y: boolean; }' is not assignable to type '{ x: any; y?: boolean; }'. - Property 'x' is missing in type '{ y: boolean; }'. +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(106,5): error TS2345: Argument of type '[number, [string, { y: false; }]]' is not assignable to parameter of type '[number, [string, { x: any; y?: boolean; }]]'. + Type '[string, { y: false; }]' is not assignable to type '[string, { x: any; y?: boolean; }]'. + Type '{ y: false; }' is not assignable to type '{ x: any; y?: boolean; }'. + Property 'x' is missing in type '{ y: false; }'. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(138,6): error TS2322: Type 'string' is not assignable to type 'number'. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(138,9): error TS2322: Type 'number' is not assignable to type 'string'. @@ -96,10 +96,10 @@ tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(138,9): function f7() { var [x = 0, y = 1] = [1, "hello"]; // Error, initializer for y must be string - ~ -!!! error TS2322: Type 'number' is not assignable to type 'string'. var x: number; var y: string; + ~ +!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'y' must be of type 'string | number', but here has type 'string'. } function f8() { @@ -171,10 +171,10 @@ tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(138,9): f14([2, ["abc", { x: 0 }]]); f14([2, ["abc", { y: false }]]); // Error, no x ~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2345: Argument of type '[number, [string, { y: boolean; }]]' is not assignable to parameter of type '[number, [string, { x: any; y?: boolean; }]]'. -!!! error TS2345: Type '[string, { y: boolean; }]' is not assignable to type '[string, { x: any; y?: boolean; }]'. -!!! error TS2345: Type '{ y: boolean; }' is not assignable to type '{ x: any; y?: boolean; }'. -!!! error TS2345: Property 'x' is missing in type '{ y: boolean; }'. +!!! error TS2345: Argument of type '[number, [string, { y: false; }]]' is not assignable to parameter of type '[number, [string, { x: any; y?: boolean; }]]'. +!!! error TS2345: Type '[string, { y: false; }]' is not assignable to type '[string, { x: any; y?: boolean; }]'. +!!! error TS2345: Type '{ y: false; }' is not assignable to type '{ x: any; y?: boolean; }'. +!!! error TS2345: Property 'x' is missing in type '{ y: false; }'. module M { export var [a, b] = [1, 2]; diff --git a/tests/baselines/reference/deleteOperatorWithBooleanType.types b/tests/baselines/reference/deleteOperatorWithBooleanType.types index 068c67031ef2f..81c12ad618228 100644 --- a/tests/baselines/reference/deleteOperatorWithBooleanType.types +++ b/tests/baselines/reference/deleteOperatorWithBooleanType.types @@ -5,7 +5,7 @@ var BOOLEAN: boolean; function foo(): boolean { return true; } >foo : () => boolean ->true : boolean +>true : true class A { >A : A diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.errors.txt b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.errors.txt index e22b23122d34d..610167a1bc0c7 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.errors.txt +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.errors.txt @@ -3,7 +3,6 @@ tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAss tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(4,5): error TS2461: Type 'undefined' is not an array type. tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(9,5): error TS2322: Type '[number, number, string]' is not assignable to type '[number, boolean, string]'. Type 'number' is not assignable to type 'boolean'. -tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(17,6): error TS2322: Type 'string' is not assignable to type 'Number'. tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(22,5): error TS2322: Type 'number[]' is not assignable to type '[number, number]'. Property '0' is missing in type 'number[]'. tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(23,5): error TS2322: Type 'number[]' is not assignable to type '[string, string]'. @@ -11,7 +10,7 @@ tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAss tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(34,5): error TS2461: Type 'F' is not an array type. -==== tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts (8 errors) ==== +==== tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts (7 errors) ==== // V is an array assignment pattern, S is the type Any or an array-like type (section 3.3.2), and, for each assignment element E in V, // S is the type Any, or var [[a0], [[a1]]] = [] // Error @@ -38,8 +37,6 @@ tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAss return <[number, number, number]>[1, 2, 3]; } var [b3 = "string", b4, b5] = bar(); // Error - ~~ -!!! error TS2322: Type 'string' is not assignable to type 'Number'. // V is an array assignment pattern, S is the type Any or an array-like type (section 3.3.2), and, for each assignment element E in V, // S is not a tuple- like type and the numeric index signature type of S is assignable to the target given in E. diff --git a/tests/baselines/reference/destructuringObjectBindingPatternAndAssignment1ES5.types b/tests/baselines/reference/destructuringObjectBindingPatternAndAssignment1ES5.types index cb6052d93fd41..2301902bf648a 100644 --- a/tests/baselines/reference/destructuringObjectBindingPatternAndAssignment1ES5.types +++ b/tests/baselines/reference/destructuringObjectBindingPatternAndAssignment1ES5.types @@ -69,10 +69,10 @@ function foo(): F { >F : F return { ->{ 1: true } : { 1: boolean; } +>{ 1: true } : { 1: true; } 1: true ->true : boolean +>true : true }; } @@ -82,10 +82,10 @@ function bar(): F { >F : F return { ->{ 2: true } : { 2: boolean; } +>{ 2: true } : { 2: true; } 2: true ->true : boolean +>true : true }; } diff --git a/tests/baselines/reference/destructuringObjectBindingPatternAndAssignment1ES6.types b/tests/baselines/reference/destructuringObjectBindingPatternAndAssignment1ES6.types index 2d77c20f65be8..48428881290c4 100644 --- a/tests/baselines/reference/destructuringObjectBindingPatternAndAssignment1ES6.types +++ b/tests/baselines/reference/destructuringObjectBindingPatternAndAssignment1ES6.types @@ -69,10 +69,10 @@ function foo(): F { >F : F return { ->{ 1: true } : { 1: boolean; } +>{ 1: true } : { 1: true; } 1: true ->true : boolean +>true : true }; } @@ -82,10 +82,10 @@ function bar(): F { >F : F return { ->{ 2: true } : { 2: boolean; } +>{ 2: true } : { 2: true; } 2: true ->true : boolean +>true : true }; } diff --git a/tests/baselines/reference/destructuringVariableDeclaration1ES5.types b/tests/baselines/reference/destructuringVariableDeclaration1ES5.types index c4693fac23fba..191cdc169b1f3 100644 --- a/tests/baselines/reference/destructuringVariableDeclaration1ES5.types +++ b/tests/baselines/reference/destructuringVariableDeclaration1ES5.types @@ -16,12 +16,12 @@ var [a3, [[a4]], a5]: [number, [[string]], boolean] = [1, [["hello"]], true]; >a3 : number >a4 : string >a5 : boolean ->[1, [["hello"]], true] : [number, [[string]], boolean] +>[1, [["hello"]], true] : [number, [[string]], true] >1 : number >[["hello"]] : [[string]] >["hello"] : [string] >"hello" : string ->true : boolean +>true : true // The type T associated with a destructuring variable declaration is determined as follows: // Otherwise, if the declaration includes an initializer expression, T is the type of that initializer expression. @@ -52,21 +52,21 @@ var [b2 = 3, b3 = true, b4 = temp] = [3, false, { t1: false, t2: "hello" }]; >true : boolean >b4 : { t1: boolean; t2: string; } >temp : { t1: boolean; t2: string; } ->[3, false, { t1: false, t2: "hello" }] : [number, boolean, { t1: boolean; t2: string; }] +>[3, false, { t1: false, t2: "hello" }] : [number, false, { t1: false; t2: string; }] >3 : number ->false : boolean ->{ t1: false, t2: "hello" } : { t1: boolean; t2: string; } ->t1 : boolean ->false : boolean +>false : false +>{ t1: false, t2: "hello" } : { t1: false; t2: string; } +>t1 : false +>false : false >t2 : string >"hello" : string var [b5 = 3, b6 = true, b7 = temp] = [undefined, undefined, undefined]; ->b5 : any +>b5 : number >3 : number ->b6 : any +>b6 : boolean >true : boolean ->b7 : any +>b7 : { t1: boolean; t2: string; } >temp : { t1: boolean; t2: string; } >[undefined, undefined, undefined] : [undefined, undefined, undefined] >undefined : undefined diff --git a/tests/baselines/reference/destructuringVariableDeclaration1ES6.types b/tests/baselines/reference/destructuringVariableDeclaration1ES6.types index 847831ccc84cd..50f5cfc8a5a7d 100644 --- a/tests/baselines/reference/destructuringVariableDeclaration1ES6.types +++ b/tests/baselines/reference/destructuringVariableDeclaration1ES6.types @@ -16,12 +16,12 @@ var [a3, [[a4]], a5]: [number, [[string]], boolean] = [1, [["hello"]], true]; >a3 : number >a4 : string >a5 : boolean ->[1, [["hello"]], true] : [number, [[string]], boolean] +>[1, [["hello"]], true] : [number, [[string]], true] >1 : number >[["hello"]] : [[string]] >["hello"] : [string] >"hello" : string ->true : boolean +>true : true // The type T associated with a destructuring variable declaration is determined as follows: // Otherwise, if the declaration includes an initializer expression, T is the type of that initializer expression. @@ -52,21 +52,21 @@ var [b2 = 3, b3 = true, b4 = temp] = [3, false, { t1: false, t2: "hello" }]; >true : boolean >b4 : { t1: boolean; t2: string; } >temp : { t1: boolean; t2: string; } ->[3, false, { t1: false, t2: "hello" }] : [number, boolean, { t1: boolean; t2: string; }] +>[3, false, { t1: false, t2: "hello" }] : [number, false, { t1: false; t2: string; }] >3 : number ->false : boolean ->{ t1: false, t2: "hello" } : { t1: boolean; t2: string; } ->t1 : boolean ->false : boolean +>false : false +>{ t1: false, t2: "hello" } : { t1: false; t2: string; } +>t1 : false +>false : false >t2 : string >"hello" : string var [b5 = 3, b6 = true, b7 = temp] = [undefined, undefined, undefined]; ->b5 : any +>b5 : number >3 : number ->b6 : any +>b6 : boolean >true : boolean ->b7 : any +>b7 : { t1: boolean; t2: string; } >temp : { t1: boolean; t2: string; } >[undefined, undefined, undefined] : [undefined, undefined, undefined] >undefined : undefined diff --git a/tests/baselines/reference/destructuringVariableDeclaration2.errors.txt b/tests/baselines/reference/destructuringVariableDeclaration2.errors.txt index bdbda6f9a96eb..c831b10a467fb 100644 --- a/tests/baselines/reference/destructuringVariableDeclaration2.errors.txt +++ b/tests/baselines/reference/destructuringVariableDeclaration2.errors.txt @@ -1,20 +1,15 @@ tests/cases/conformance/es6/destructuring/destructuringVariableDeclaration2.ts(3,5): error TS2322: Type '{ a1: boolean; a2: number; }' is not assignable to type '{ a1: number; a2: string; }'. Types of property 'a1' are incompatible. Type 'boolean' is not assignable to type 'number'. -tests/cases/conformance/es6/destructuring/destructuringVariableDeclaration2.ts(4,5): error TS2322: Type '[number, [[boolean]], boolean]' is not assignable to type '[number, [[string]], boolean]'. +tests/cases/conformance/es6/destructuring/destructuringVariableDeclaration2.ts(4,5): error TS2322: Type '[number, [[boolean]], true]' is not assignable to type '[number, [[string]], boolean]'. Type '[[boolean]]' is not assignable to type '[[string]]'. Type '[boolean]' is not assignable to type '[string]'. Type 'boolean' is not assignable to type 'string'. -tests/cases/conformance/es6/destructuring/destructuringVariableDeclaration2.ts(9,25): error TS2322: Type '{ t1: boolean; t2: string; }' is not assignable to type '{ t1: boolean; t2: number; }'. - Types of property 't2' are incompatible. - Type 'string' is not assignable to type 'number'. tests/cases/conformance/es6/destructuring/destructuringVariableDeclaration2.ts(14,16): error TS2459: Type 'number | { c3: number; c5: number; }' has no property 'c3' and no string index signature. tests/cases/conformance/es6/destructuring/destructuringVariableDeclaration2.ts(14,24): error TS2459: Type 'number | { c3: number; c5: number; }' has no property 'c5' and no string index signature. -tests/cases/conformance/es6/destructuring/destructuringVariableDeclaration2.ts(19,10): error TS2322: Type 'string[]' is not assignable to type 'number[]'. - Type 'string' is not assignable to type 'number'. -==== tests/cases/conformance/es6/destructuring/destructuringVariableDeclaration2.ts (6 errors) ==== +==== tests/cases/conformance/es6/destructuring/destructuringVariableDeclaration2.ts (4 errors) ==== // The type T associated with a destructuring variable declaration is determined as follows: // If the declaration includes a type annotation, T is that type. var {a1, a2}: { a1: number, a2: string } = { a1: true, a2: 1 } // Error @@ -24,7 +19,7 @@ tests/cases/conformance/es6/destructuring/destructuringVariableDeclaration2.ts(1 !!! error TS2322: Type 'boolean' is not assignable to type 'number'. var [a3, [[a4]], a5]: [number, [[string]], boolean] = [1, [[false]], true]; // Error ~~~~~~~~~~~~~~~~ -!!! error TS2322: Type '[number, [[boolean]], boolean]' is not assignable to type '[number, [[string]], boolean]'. +!!! error TS2322: Type '[number, [[boolean]], true]' is not assignable to type '[number, [[string]], boolean]'. !!! error TS2322: Type '[[boolean]]' is not assignable to type '[[string]]'. !!! error TS2322: Type '[boolean]' is not assignable to type '[string]'. !!! error TS2322: Type 'boolean' is not assignable to type 'string'. @@ -33,10 +28,6 @@ tests/cases/conformance/es6/destructuring/destructuringVariableDeclaration2.ts(1 // Otherwise, if the declaration includes an initializer expression, T is the type of that initializer expression. var temp = { t1: true, t2: "false" }; var [b0 = 3, b1 = true, b2 = temp] = [3, false, { t1: false, t2: 5}]; // Error - ~~ -!!! error TS2322: Type '{ t1: boolean; t2: string; }' is not assignable to type '{ t1: boolean; t2: number; }'. -!!! error TS2322: Types of property 't2' are incompatible. -!!! error TS2322: Type 'string' is not assignable to type 'number'. // The type T associated with a binding element is determined as follows: // If the binding element is a rest element, T is an array type with @@ -50,7 +41,4 @@ tests/cases/conformance/es6/destructuring/destructuringVariableDeclaration2.ts(1 // When a destructuring variable declaration, binding property, or binding element specifies // an initializer expression, the type of the initializer expression is required to be assignable // to the widened form of the type associated with the destructuring variable declaration, binding property, or binding element. - var {d: {d1 = ["string", null]}}: { d: { d1: number[] } } = { d: { d1: [1, 2] } }; // Error - ~~ -!!! error TS2322: Type 'string[]' is not assignable to type 'number[]'. -!!! error TS2322: Type 'string' is not assignable to type 'number'. \ No newline at end of file + var {d: {d1 = ["string", null]}}: { d: { d1: number[] } } = { d: { d1: [1, 2] } }; // Error \ No newline at end of file diff --git a/tests/baselines/reference/emitArrowFunction.types b/tests/baselines/reference/emitArrowFunction.types index 2ac9ef07af42e..a4671ea5a31bd 100644 --- a/tests/baselines/reference/emitArrowFunction.types +++ b/tests/baselines/reference/emitArrowFunction.types @@ -31,12 +31,12 @@ function foo(func: () => boolean) { } foo(() => true); >foo(() => true) : void >foo : (func: () => boolean) => void ->() => true : () => boolean ->true : boolean +>() => true : () => true +>true : true foo(() => { return false; }); >foo(() => { return false; }) : void >foo : (func: () => boolean) => void ->() => { return false; } : () => boolean ->false : boolean +>() => { return false; } : () => false +>false : false diff --git a/tests/baselines/reference/emitArrowFunctionES6.types b/tests/baselines/reference/emitArrowFunctionES6.types index d37c08f855c6d..2cadcf2cac9ff 100644 --- a/tests/baselines/reference/emitArrowFunctionES6.types +++ b/tests/baselines/reference/emitArrowFunctionES6.types @@ -31,14 +31,14 @@ function foo(func: () => boolean) { } foo(() => true); >foo(() => true) : void >foo : (func: () => boolean) => void ->() => true : () => boolean ->true : boolean +>() => true : () => true +>true : true foo(() => { return false; }); >foo(() => { return false; }) : void >foo : (func: () => boolean) => void ->() => { return false; } : () => boolean ->false : boolean +>() => { return false; } : () => false +>false : false // Binding patterns in arrow functions var p1 = ([a]) => { }; diff --git a/tests/baselines/reference/emitArrowFunctionThisCapturing.types b/tests/baselines/reference/emitArrowFunctionThisCapturing.types index 2cfe06579afe0..81dc5d83f0dbb 100644 --- a/tests/baselines/reference/emitArrowFunctionThisCapturing.types +++ b/tests/baselines/reference/emitArrowFunctionThisCapturing.types @@ -32,7 +32,7 @@ function foo(func: () => boolean) { } foo(() => { >foo(() => { this.age = 100; return true;}) : void >foo : (func: () => boolean) => void ->() => { this.age = 100; return true;} : () => boolean +>() => { this.age = 100; return true;} : () => true this.age = 100; >this.age = 100 : number @@ -42,7 +42,7 @@ foo(() => { >100 : number return true; ->true : boolean +>true : true }); diff --git a/tests/baselines/reference/emitArrowFunctionThisCapturingES6.types b/tests/baselines/reference/emitArrowFunctionThisCapturingES6.types index cc5405cebb4e1..a16b6391f020a 100644 --- a/tests/baselines/reference/emitArrowFunctionThisCapturingES6.types +++ b/tests/baselines/reference/emitArrowFunctionThisCapturingES6.types @@ -32,7 +32,7 @@ function foo(func: () => boolean){ } foo(() => { >foo(() => { this.age = 100; return true;}) : void >foo : (func: () => boolean) => void ->() => { this.age = 100; return true;} : () => boolean +>() => { this.age = 100; return true;} : () => true this.age = 100; >this.age = 100 : number @@ -42,7 +42,7 @@ foo(() => { >100 : number return true; ->true : boolean +>true : true }); diff --git a/tests/baselines/reference/emitClassDeclarationWithMethodInES6.types b/tests/baselines/reference/emitClassDeclarationWithMethodInES6.types index 02a90729486a7..a42c019cd408c 100644 --- a/tests/baselines/reference/emitClassDeclarationWithMethodInES6.types +++ b/tests/baselines/reference/emitClassDeclarationWithMethodInES6.types @@ -46,7 +46,7 @@ class D { static ["computedname6"](a: string): boolean { return true; } >"computedname6" : string >a : string ->true : boolean +>true : true static staticMethod() { >staticMethod : () => number diff --git a/tests/baselines/reference/emitClassDeclarationWithPropertyAssignmentInES6.types b/tests/baselines/reference/emitClassDeclarationWithPropertyAssignmentInES6.types index ccf4ca3ca9de1..79899e77bee72 100644 --- a/tests/baselines/reference/emitClassDeclarationWithPropertyAssignmentInES6.types +++ b/tests/baselines/reference/emitClassDeclarationWithPropertyAssignmentInES6.types @@ -33,7 +33,7 @@ class E extends D{ z: boolean = true; >z : boolean ->true : boolean +>true : true } class F extends D{ @@ -42,7 +42,7 @@ class F extends D{ z: boolean = true; >z : boolean ->true : boolean +>true : true j: string; >j : string diff --git a/tests/baselines/reference/escapedIdentifiers.types b/tests/baselines/reference/escapedIdentifiers.types index 67713976bd6ee..151408de30892 100644 --- a/tests/baselines/reference/escapedIdentifiers.types +++ b/tests/baselines/reference/escapedIdentifiers.types @@ -238,9 +238,9 @@ class testClass { >'string' : string arg\u0033 = true; ->arg\u0033 = true : boolean +>arg\u0033 = true : true >arg\u0033 : boolean ->true : boolean +>true : true arg4 = 2; >arg4 = 2 : number @@ -266,7 +266,7 @@ var constructorTestObject = new constructorTestClass(1, 'string', true, 2); >constructorTestClass : typeof constructorTestClass >1 : number >'string' : string ->true : boolean +>true : true >2 : number constructorTestObject.arg\u0031 = 1; @@ -284,11 +284,11 @@ constructorTestObject.arg2 = 'string'; >'string' : string constructorTestObject.arg\u0033 = true; ->constructorTestObject.arg\u0033 = true : boolean +>constructorTestObject.arg\u0033 = true : true >constructorTestObject.arg\u0033 : boolean >constructorTestObject : constructorTestClass >arg\u0033 : boolean ->true : boolean +>true : true constructorTestObject.arg4 = 2; >constructorTestObject.arg4 = 2 : number diff --git a/tests/baselines/reference/for-of36.types b/tests/baselines/reference/for-of36.types index e23ea79d0a90e..f55b5377acc48 100644 --- a/tests/baselines/reference/for-of36.types +++ b/tests/baselines/reference/for-of36.types @@ -1,9 +1,9 @@ === tests/cases/conformance/es6/for-ofStatements/for-of36.ts === var tuple: [string, boolean] = ["", true]; >tuple : [string, boolean] ->["", true] : [string, boolean] +>["", true] : [string, true] >"" : string ->true : boolean +>true : true for (var v of tuple) { >v : string | boolean diff --git a/tests/baselines/reference/for-of37.types b/tests/baselines/reference/for-of37.types index 89272742f6264..986e26784026f 100644 --- a/tests/baselines/reference/for-of37.types +++ b/tests/baselines/reference/for-of37.types @@ -3,10 +3,10 @@ var map = new Map([["", true]]); >map : Map >new Map([["", true]]) : Map >Map : MapConstructor ->[["", true]] : [string, boolean][] ->["", true] : [string, boolean] +>[["", true]] : [string, true][] +>["", true] : [string, true] >"" : string ->true : boolean +>true : true for (var v of map) { >v : [string, boolean] diff --git a/tests/baselines/reference/for-of38.types b/tests/baselines/reference/for-of38.types index f8b7555781f65..78223cfc5be80 100644 --- a/tests/baselines/reference/for-of38.types +++ b/tests/baselines/reference/for-of38.types @@ -3,10 +3,10 @@ var map = new Map([["", true]]); >map : Map >new Map([["", true]]) : Map >Map : MapConstructor ->[["", true]] : [string, boolean][] ->["", true] : [string, boolean] +>[["", true]] : [string, true][] +>["", true] : [string, true] >"" : string ->true : boolean +>true : true for (var [k, v] of map) { >k : string diff --git a/tests/baselines/reference/for-of40.types b/tests/baselines/reference/for-of40.types index 6693514ec53b6..9d2207409f380 100644 --- a/tests/baselines/reference/for-of40.types +++ b/tests/baselines/reference/for-of40.types @@ -3,10 +3,10 @@ var map = new Map([["", true]]); >map : Map >new Map([["", true]]) : Map >Map : MapConstructor ->[["", true]] : [string, boolean][] ->["", true] : [string, boolean] +>[["", true]] : [string, true][] +>["", true] : [string, true] >"" : string ->true : boolean +>true : true for (var [k = "", v = false] of map) { >k : string diff --git a/tests/baselines/reference/for-of43.errors.txt b/tests/baselines/reference/for-of43.errors.txt deleted file mode 100644 index c5790278e5341..0000000000000 --- a/tests/baselines/reference/for-of43.errors.txt +++ /dev/null @@ -1,11 +0,0 @@ -tests/cases/conformance/es6/for-ofStatements/for-of43.ts(2,25): error TS2322: Type 'boolean' is not assignable to type 'number'. - - -==== tests/cases/conformance/es6/for-ofStatements/for-of43.ts (1 errors) ==== - var array = [{ x: "", y: 0 }] - for (var {x: a = "", y: b = true} of array) { - ~ -!!! error TS2322: Type 'boolean' is not assignable to type 'number'. - a; - b; - } \ No newline at end of file diff --git a/tests/baselines/reference/for-of43.symbols b/tests/baselines/reference/for-of43.symbols new file mode 100644 index 0000000000000..4add17ad547b9 --- /dev/null +++ b/tests/baselines/reference/for-of43.symbols @@ -0,0 +1,19 @@ +=== tests/cases/conformance/es6/for-ofStatements/for-of43.ts === +var array = [{ x: "", y: 0 }] +>array : Symbol(array, Decl(for-of43.ts, 0, 3)) +>x : Symbol(x, Decl(for-of43.ts, 0, 14)) +>y : Symbol(y, Decl(for-of43.ts, 0, 21)) + +for (var {x: a = "", y: b = true} of array) { +>x : Symbol(x, Decl(for-of43.ts, 0, 14)) +>a : Symbol(a, Decl(for-of43.ts, 1, 10)) +>y : Symbol(y, Decl(for-of43.ts, 0, 21)) +>b : Symbol(b, Decl(for-of43.ts, 1, 20)) +>array : Symbol(array, Decl(for-of43.ts, 0, 3)) + + a; +>a : Symbol(a, Decl(for-of43.ts, 1, 10)) + + b; +>b : Symbol(b, Decl(for-of43.ts, 1, 20)) +} diff --git a/tests/baselines/reference/for-of43.types b/tests/baselines/reference/for-of43.types new file mode 100644 index 0000000000000..a11cd47182c5f --- /dev/null +++ b/tests/baselines/reference/for-of43.types @@ -0,0 +1,25 @@ +=== tests/cases/conformance/es6/for-ofStatements/for-of43.ts === +var array = [{ x: "", y: 0 }] +>array : { x: string; y: number; }[] +>[{ x: "", y: 0 }] : { x: string; y: number; }[] +>{ x: "", y: 0 } : { x: string; y: number; } +>x : string +>"" : string +>y : number +>0 : number + +for (var {x: a = "", y: b = true} of array) { +>x : any +>a : string +>"" : string +>y : any +>b : number | boolean +>true : boolean +>array : { x: string; y: number; }[] + + a; +>a : string + + b; +>b : number | boolean +} diff --git a/tests/baselines/reference/for-of44.types b/tests/baselines/reference/for-of44.types index e6f4e0450b3c7..152edd6f1659e 100644 --- a/tests/baselines/reference/for-of44.types +++ b/tests/baselines/reference/for-of44.types @@ -1,13 +1,13 @@ === tests/cases/conformance/es6/for-ofStatements/for-of44.ts === var array: [number, string | boolean | symbol][] = [[0, ""], [0, true], [1, Symbol()]] >array : [number, string | boolean | symbol][] ->[[0, ""], [0, true], [1, Symbol()]] : ([number, string] | [number, boolean] | [number, symbol])[] +>[[0, ""], [0, true], [1, Symbol()]] : ([number, string] | [number, true] | [number, symbol])[] >[0, ""] : [number, string] >0 : number >"" : string ->[0, true] : [number, boolean] +>[0, true] : [number, true] >0 : number ->true : boolean +>true : true >[1, Symbol()] : [number, symbol] >1 : number >Symbol() : symbol diff --git a/tests/baselines/reference/for-of45.types b/tests/baselines/reference/for-of45.types index 7c853993b0aef..a2a70ddfed3d2 100644 --- a/tests/baselines/reference/for-of45.types +++ b/tests/baselines/reference/for-of45.types @@ -7,19 +7,19 @@ var map = new Map([["", true]]); >map : Map >new Map([["", true]]) : Map >Map : MapConstructor ->[["", true]] : [string, boolean][] ->["", true] : [string, boolean] +>[["", true]] : [string, true][] +>["", true] : [string, true] >"" : string ->true : boolean +>true : true for ([k = "", v = false] of map) { ->[k = "", v = false] : [string, boolean] +>[k = "", v = false] : [string, false] >k = "" : string >k : string >"" : string ->v = false : boolean +>v = false : false >v : boolean ->false : boolean +>false : false >map : Map k; diff --git a/tests/baselines/reference/for-of50.types b/tests/baselines/reference/for-of50.types index 5d5dac7abed7a..87ad29793e832 100644 --- a/tests/baselines/reference/for-of50.types +++ b/tests/baselines/reference/for-of50.types @@ -3,10 +3,10 @@ var map = new Map([["", true]]); >map : Map >new Map([["", true]]) : Map >Map : MapConstructor ->[["", true]] : [string, boolean][] ->["", true] : [string, boolean] +>[["", true]] : [string, true][] +>["", true] : [string, true] >"" : string ->true : boolean +>true : true for (const [k, v] of map) { >k : string diff --git a/tests/baselines/reference/functionOverloads39.types b/tests/baselines/reference/functionOverloads39.types index 78c0e78bca14b..bf4a6ec5ae946 100644 --- a/tests/baselines/reference/functionOverloads39.types +++ b/tests/baselines/reference/functionOverloads39.types @@ -19,8 +19,8 @@ var x = foo([{a:true}]); >x : number >foo([{a:true}]) : number >foo : { (bar: { a: number; }[]): string; (bar: { a: boolean; }[]): number; } ->[{a:true}] : { a: boolean; }[] ->{a:true} : { a: boolean; } ->a : boolean ->true : boolean +>[{a:true}] : { a: true; }[] +>{a:true} : { a: true; } +>a : true +>true : true diff --git a/tests/baselines/reference/genericArgumentCallSigAssignmentCompat.types b/tests/baselines/reference/genericArgumentCallSigAssignmentCompat.types index c5fd984d32767..f7dd10b11dd50 100644 --- a/tests/baselines/reference/genericArgumentCallSigAssignmentCompat.types +++ b/tests/baselines/reference/genericArgumentCallSigAssignmentCompat.types @@ -49,8 +49,8 @@ _.all([true, 1, null, 'yes'], _.identity); >_.all : (list: T[], iterator?: Underscore.Iterator, context?: any) => boolean >_ : Underscore.Static >all : (list: T[], iterator?: Underscore.Iterator, context?: any) => boolean ->[true, 1, null, 'yes'] : (string | number | boolean)[] ->true : boolean +>[true, 1, null, 'yes'] : (string | number | true)[] +>true : true >1 : number >null : null >'yes' : string @@ -64,8 +64,8 @@ _.all([true], _.identity); >_.all : (list: T[], iterator?: Underscore.Iterator, context?: any) => boolean >_ : Underscore.Static >all : (list: T[], iterator?: Underscore.Iterator, context?: any) => boolean ->[true] : boolean[] ->true : boolean +>[true] : true[] +>true : true >_.identity : (value: T) => T >_ : Underscore.Static >identity : (value: T) => T diff --git a/tests/baselines/reference/genericCallTypeArgumentInference.types b/tests/baselines/reference/genericCallTypeArgumentInference.types index 0208ec74f1e77..09cd907a5a9c0 100644 --- a/tests/baselines/reference/genericCallTypeArgumentInference.types +++ b/tests/baselines/reference/genericCallTypeArgumentInference.types @@ -202,7 +202,7 @@ var r6 = c.foo3(true, 1); // boolean >c.foo3 : (t: T, u: number) => T >c : C >foo3 : (t: T, u: number) => T ->true : boolean +>true : true >1 : number var r7 = c.foo4('', true); // string @@ -212,7 +212,7 @@ var r7 = c.foo4('', true); // string >c : C >foo4 : (t: string, u: U) => string >'' : string ->true : boolean +>true : true var r8 = c.foo5(true, 1); // boolean >r8 : boolean @@ -220,7 +220,7 @@ var r8 = c.foo5(true, 1); // boolean >c.foo5 : (t: T, u: U) => T >c : C >foo5 : (t: T, u: U) => T ->true : boolean +>true : true >1 : number var r9 = c.foo6(); // {} @@ -349,7 +349,7 @@ var r6 = i.foo3(true, 1); // boolean >i.foo3 : (t: T, u: number) => T >i : I >foo3 : (t: T, u: number) => T ->true : boolean +>true : true >1 : number var r7 = i.foo4('', true); // string @@ -359,7 +359,7 @@ var r7 = i.foo4('', true); // string >i : I >foo4 : (t: string, u: U) => string >'' : string ->true : boolean +>true : true var r8 = i.foo5(true, 1); // boolean >r8 : boolean @@ -367,7 +367,7 @@ var r8 = i.foo5(true, 1); // boolean >i.foo5 : (t: T, u: U) => T >i : I >foo5 : (t: T, u: U) => T ->true : boolean +>true : true >1 : number var r9 = i.foo6(); // {} diff --git a/tests/baselines/reference/genericClassWithStaticFactory.types b/tests/baselines/reference/genericClassWithStaticFactory.types index 2daad9003ebda..c1af646e7fb11 100644 --- a/tests/baselines/reference/genericClassWithStaticFactory.types +++ b/tests/baselines/reference/genericClassWithStaticFactory.types @@ -175,11 +175,11 @@ module Editor { >T : T entry.isHead = false; ->entry.isHead = false : boolean +>entry.isHead = false : false >entry.isHead : boolean >entry : List >isHead : boolean ->false : boolean +>false : false entry.next = this.next; >entry.next = this.next : List @@ -237,11 +237,11 @@ module Editor { >data : T entry.isHead = false; ->entry.isHead = false : boolean +>entry.isHead = false : false >entry.isHead : boolean >entry : List >isHead : boolean ->false : boolean +>false : false entry.next = this.next; >entry.next = this.next : List @@ -317,11 +317,11 @@ module Editor { >T : T entry.isHead = false; ->entry.isHead = false : boolean +>entry.isHead = false : false >entry.isHead : boolean >entry : List >isHead : boolean ->false : boolean +>false : false this.prev.next = entry; >this.prev.next = entry : List @@ -501,7 +501,7 @@ module Editor { >new List(true, null) : List >List : typeof List >T : T ->true : boolean +>true : true >null : null entry.prev = entry; @@ -537,7 +537,7 @@ module Editor { >new List(false, data) : List >List : typeof List >T : T ->false : boolean +>false : false >data : T entry.prev = entry; diff --git a/tests/baselines/reference/genericTypeArgumentInference1.types b/tests/baselines/reference/genericTypeArgumentInference1.types index 2d64c8f5c58d7..e2a570de28fec 100644 --- a/tests/baselines/reference/genericTypeArgumentInference1.types +++ b/tests/baselines/reference/genericTypeArgumentInference1.types @@ -47,8 +47,8 @@ var r = _.all([true, 1, null, 'yes'], _.identity); >_.all : (list: T[], iterator?: Underscore.Iterator, context?: any) => T >_ : Underscore.Static >all : (list: T[], iterator?: Underscore.Iterator, context?: any) => T ->[true, 1, null, 'yes'] : (string | number | boolean)[] ->true : boolean +>[true, 1, null, 'yes'] : (string | number | true)[] +>true : true >1 : number >null : null >'yes' : string @@ -62,8 +62,8 @@ var r2 = _.all([true], _.identity); >_.all : (list: T[], iterator?: Underscore.Iterator, context?: any) => T >_ : Underscore.Static >all : (list: T[], iterator?: Underscore.Iterator, context?: any) => T ->[true] : boolean[] ->true : boolean +>[true] : true[] +>true : true >_.identity : (value: T) => T >_ : Underscore.Static >identity : (value: T) => T diff --git a/tests/baselines/reference/genericWithCallSignatureReturningSpecialization.types b/tests/baselines/reference/genericWithCallSignatureReturningSpecialization.types index c58d56e3a75d9..b314839a97ecd 100644 --- a/tests/baselines/reference/genericWithCallSignatureReturningSpecialization.types +++ b/tests/baselines/reference/genericWithCallSignatureReturningSpecialization.types @@ -18,5 +18,5 @@ var x: B; x(true); // was error >x(true) : void >x : B ->true : boolean +>true : true diff --git a/tests/baselines/reference/getterSetterNonAccessor.types b/tests/baselines/reference/getterSetterNonAccessor.types index 48d9f9c85e0cb..0534ca623e79b 100644 --- a/tests/baselines/reference/getterSetterNonAccessor.types +++ b/tests/baselines/reference/getterSetterNonAccessor.types @@ -16,8 +16,8 @@ Object.defineProperty({}, "0", ({ >"0" : string >({ get: getFunc, set: setFunc, configurable: true }) : PropertyDescriptor >PropertyDescriptor : PropertyDescriptor ->({ get: getFunc, set: setFunc, configurable: true }) : { get: () => any; set: (v: any) => void; configurable: boolean; } ->{ get: getFunc, set: setFunc, configurable: true } : { get: () => any; set: (v: any) => void; configurable: boolean; } +>({ get: getFunc, set: setFunc, configurable: true }) : { get: () => any; set: (v: any) => void; configurable: true; } +>{ get: getFunc, set: setFunc, configurable: true } : { get: () => any; set: (v: any) => void; configurable: true; } get: getFunc, >get : () => any @@ -28,8 +28,8 @@ Object.defineProperty({}, "0", ({ >setFunc : (v: any) => void configurable: true ->configurable : boolean ->true : boolean +>configurable : true +>true : true })); diff --git a/tests/baselines/reference/indexerWithTuple.types b/tests/baselines/reference/indexerWithTuple.types index 4faae2cda29c3..54ee714f5ef41 100644 --- a/tests/baselines/reference/indexerWithTuple.types +++ b/tests/baselines/reference/indexerWithTuple.types @@ -21,8 +21,8 @@ var unionTuple1: [number, string| number] = [10, "foo"]; var unionTuple2: [boolean, string| number] = [true, "foo"]; >unionTuple2 : [boolean, string | number] ->[true, "foo"] : [boolean, string] ->true : boolean +>[true, "foo"] : [true, string] +>true : true >"foo" : string // no error diff --git a/tests/baselines/reference/interfaceContextualType.types b/tests/baselines/reference/interfaceContextualType.types index 0e835a2f1f955..d1ff4021c5d44 100644 --- a/tests/baselines/reference/interfaceContextualType.types +++ b/tests/baselines/reference/interfaceContextualType.types @@ -34,31 +34,31 @@ class Bug { >{} : {} this.values['comments'] = { italic: true }; ->this.values['comments'] = { italic: true } : { italic: boolean; } +>this.values['comments'] = { italic: true } : { italic: true; } >this.values['comments'] : IOptions >this.values : IMap >this : this >values : IMap >'comments' : string ->{ italic: true } : { italic: boolean; } ->italic : boolean ->true : boolean +>{ italic: true } : { italic: true; } +>italic : true +>true : true } shouldBeOK() { >shouldBeOK : () => void this.values = { ->this.values = { comments: { italic: true } } : { comments: { italic: boolean; }; } +>this.values = { comments: { italic: true } } : { comments: { italic: true; }; } >this.values : IMap >this : this >values : IMap ->{ comments: { italic: true } } : { comments: { italic: boolean; }; } +>{ comments: { italic: true } } : { comments: { italic: true; }; } comments: { italic: true } ->comments : { italic: boolean; } ->{ italic: true } : { italic: boolean; } ->italic : boolean ->true : boolean +>comments : { italic: true; } +>{ italic: true } : { italic: true; } +>italic : true +>true : true }; } diff --git a/tests/baselines/reference/interfaceWithPropertyOfEveryType.types b/tests/baselines/reference/interfaceWithPropertyOfEveryType.types index 7428ee73aa126..0ad754476a23d 100644 --- a/tests/baselines/reference/interfaceWithPropertyOfEveryType.types +++ b/tests/baselines/reference/interfaceWithPropertyOfEveryType.types @@ -80,7 +80,7 @@ interface Foo { var a: Foo = { >a : Foo >Foo : Foo ->{ a: 1, b: '', c: true, d: {}, e: null , f: [1], g: {}, h: (x: number) => 1, i: (x: T) => x, j: null, k: new C(), l: f1, m: M, n: {}, o: E.A} : { a: number; b: string; c: boolean; d: {}; e: null; f: number[]; g: {}; h: (x: number) => number; i: (x: T) => T; j: Foo; k: C; l: () => void; m: typeof M; n: {}; o: E; } +>{ a: 1, b: '', c: true, d: {}, e: null , f: [1], g: {}, h: (x: number) => 1, i: (x: T) => x, j: null, k: new C(), l: f1, m: M, n: {}, o: E.A} : { a: number; b: string; c: true; d: {}; e: null; f: number[]; g: {}; h: (x: number) => number; i: (x: T) => T; j: Foo; k: C; l: () => void; m: typeof M; n: {}; o: E; } a: 1, >a : number @@ -91,8 +91,8 @@ var a: Foo = { >'' : string c: true, ->c : boolean ->true : boolean +>c : true +>true : true d: {}, >d : {} diff --git a/tests/baselines/reference/iterableArrayPattern30.types b/tests/baselines/reference/iterableArrayPattern30.types index d27db2e7544b7..8cfb50c3abbd8 100644 --- a/tests/baselines/reference/iterableArrayPattern30.types +++ b/tests/baselines/reference/iterableArrayPattern30.types @@ -6,11 +6,11 @@ const [[k1, v1], [k2, v2]] = new Map([["", true], ["hello", true]]) >v2 : boolean >new Map([["", true], ["hello", true]]) : Map >Map : MapConstructor ->[["", true], ["hello", true]] : [string, boolean][] ->["", true] : [string, boolean] +>[["", true], ["hello", true]] : [string, true][] +>["", true] : [string, true] >"" : string ->true : boolean ->["hello", true] : [string, boolean] +>true : true +>["hello", true] : [string, true] >"hello" : string ->true : boolean +>true : true diff --git a/tests/baselines/reference/logicalNotOperatorWithBooleanType.types b/tests/baselines/reference/logicalNotOperatorWithBooleanType.types index b8aa6feac4cf4..63d5d38eddaba 100644 --- a/tests/baselines/reference/logicalNotOperatorWithBooleanType.types +++ b/tests/baselines/reference/logicalNotOperatorWithBooleanType.types @@ -5,7 +5,7 @@ var BOOLEAN: boolean; function foo(): boolean { return true; } >foo : () => boolean ->true : boolean +>true : true class A { >A : A diff --git a/tests/baselines/reference/memberVariableDeclarations1.types b/tests/baselines/reference/memberVariableDeclarations1.types index b7ec0fbaba02e..6f3a3856e1c35 100644 --- a/tests/baselines/reference/memberVariableDeclarations1.types +++ b/tests/baselines/reference/memberVariableDeclarations1.types @@ -47,11 +47,11 @@ class Employee2 { constructor() { this.retired = false; ->this.retired = false : boolean +>this.retired = false : false >this.retired : boolean >this : this >retired : boolean ->false : boolean +>false : false this.manager = null; >this.manager = null : null diff --git a/tests/baselines/reference/moduleMemberWithoutTypeAnnotation1.types b/tests/baselines/reference/moduleMemberWithoutTypeAnnotation1.types index c308f535a7a86..733eb617c6622 100644 --- a/tests/baselines/reference/moduleMemberWithoutTypeAnnotation1.types +++ b/tests/baselines/reference/moduleMemberWithoutTypeAnnotation1.types @@ -64,7 +64,7 @@ module TypeScript { >findToken : (position: number, includeSkippedTokens?: boolean) => PositionedToken >position : number >includeSkippedTokens : boolean ->false : boolean +>false : false >PositionedToken : PositionedToken var positionedToken = this.findTokenInternal(null, position, 0); diff --git a/tests/baselines/reference/negateOperatorWithBooleanType.types b/tests/baselines/reference/negateOperatorWithBooleanType.types index 89f5afc1c2b72..bd61a5608980c 100644 --- a/tests/baselines/reference/negateOperatorWithBooleanType.types +++ b/tests/baselines/reference/negateOperatorWithBooleanType.types @@ -5,7 +5,7 @@ var BOOLEAN: boolean; function foo(): boolean { return true; } >foo : () => boolean ->true : boolean +>true : true class A { >A : A diff --git a/tests/baselines/reference/noImplicitAnyDestructuringVarDeclaration2.types b/tests/baselines/reference/noImplicitAnyDestructuringVarDeclaration2.types index ef0a3f2c25b63..9d07a26558d7b 100644 --- a/tests/baselines/reference/noImplicitAnyDestructuringVarDeclaration2.types +++ b/tests/baselines/reference/noImplicitAnyDestructuringVarDeclaration2.types @@ -33,13 +33,13 @@ let [a2 = undefined, b2 = undefined, c2 = undefined] = [1, 2, 3]; // no error >3 : number let [a3 = undefined, b3 = null, c3 = undefined] = [1, 2, 3]; // no error ->a3 : number +>a3 : any >undefined : any >undefined : undefined ->b3 : number +>b3 : any >null : any >null : null ->c3 : number +>c3 : any >undefined : any >undefined : undefined >[1, 2, 3] : [number, number, number] @@ -106,13 +106,13 @@ let {x2 = undefined, y2 = undefined, z2 = undefined} = { x2: 1, y2: 2, z2: 3 }; >3 : number let {x3 = undefined, y3 = null, z3 = undefined} = { x3: 1, y3: 2, z3: 3 }; // no error ->x3 : number +>x3 : any >undefined : any >undefined : undefined ->y3 : number +>y3 : any >null : any >null : null ->z3 : number +>z3 : any >undefined : any >undefined : undefined >{ x3: 1, y3: 2, z3: 3 } : { x3?: number; y3?: number; z3?: number; } diff --git a/tests/baselines/reference/noImplicitReturnsInAsync1.types b/tests/baselines/reference/noImplicitReturnsInAsync1.types index 1dfc098675c4e..27746bdec5a3b 100644 --- a/tests/baselines/reference/noImplicitReturnsInAsync1.types +++ b/tests/baselines/reference/noImplicitReturnsInAsync1.types @@ -3,7 +3,7 @@ async function test(isError: boolean = false) { >test : (isError?: boolean) => Promise >isError : boolean ->false : boolean +>false : false if (isError === true) { >isError === true : boolean diff --git a/tests/baselines/reference/plusOperatorWithBooleanType.types b/tests/baselines/reference/plusOperatorWithBooleanType.types index d2218d3cc95ac..f688706c2e5e2 100644 --- a/tests/baselines/reference/plusOperatorWithBooleanType.types +++ b/tests/baselines/reference/plusOperatorWithBooleanType.types @@ -5,7 +5,7 @@ var BOOLEAN: boolean; function foo(): boolean { return true; } >foo : () => boolean ->true : boolean +>true : true class A { >A : A diff --git a/tests/baselines/reference/privacyCheckAnonymousFunctionParameter.types b/tests/baselines/reference/privacyCheckAnonymousFunctionParameter.types index c8e4d237091ab..fd5cafc037bdf 100644 --- a/tests/baselines/reference/privacyCheckAnonymousFunctionParameter.types +++ b/tests/baselines/reference/privacyCheckAnonymousFunctionParameter.types @@ -31,11 +31,11 @@ module Query { return fromDoWhile(test => { >fromDoWhile(test => { return true; }) : Iterator<{}> >fromDoWhile : (doWhile: (test: Iterator) => boolean) => Iterator ->test => { return true; } : (test: Iterator<{}>) => boolean +>test => { return true; } : (test: Iterator<{}>) => true >test : Iterator<{}> return true; ->true : boolean +>true : true }); } diff --git a/tests/baselines/reference/returnStatements.types b/tests/baselines/reference/returnStatements.types index e5332b2e6acbd..d64e7beb39fb7 100644 --- a/tests/baselines/reference/returnStatements.types +++ b/tests/baselines/reference/returnStatements.types @@ -17,7 +17,7 @@ function fn4(): void { return; } function fn5(): boolean { return true; } >fn5 : () => boolean ->true : boolean +>true : true function fn6(): Date { return new Date(12); } >fn6 : () => Date diff --git a/tests/baselines/reference/staticAnonymousTypeNotReferencingTypeParameter.types b/tests/baselines/reference/staticAnonymousTypeNotReferencingTypeParameter.types index 69de032ca2ef2..ba720d78612fc 100644 --- a/tests/baselines/reference/staticAnonymousTypeNotReferencingTypeParameter.types +++ b/tests/baselines/reference/staticAnonymousTypeNotReferencingTypeParameter.types @@ -471,10 +471,10 @@ class ListWrapper { >1 : number return true; ->true : boolean +>true : true } return false; ->false : boolean +>false : false } static clear(dit: typeof ListWrapper, list: any[]) { list.length = 0; } >clear : (dit: typeof ListWrapper, list: any[]) => void @@ -540,7 +540,7 @@ class ListWrapper { >b.length : number >b : any[] >length : number ->false : boolean +>false : false for (var i = 0; i < a.length; ++i) { >i : number @@ -561,10 +561,10 @@ class ListWrapper { >b[i] : any >b : any[] >i : number ->false : boolean +>false : false } return true; ->true : boolean +>true : true } static slice(dit: typeof ListWrapper, l: T[], from: number = 0, to: number = null): T[] { >slice : (dit: typeof ListWrapper, l: T[], from?: number, to?: number) => T[] diff --git a/tests/baselines/reference/stringLiteralTypesOverloads01.types b/tests/baselines/reference/stringLiteralTypesOverloads01.types index 3b9df5c006675..6a46c7676f745 100644 --- a/tests/baselines/reference/stringLiteralTypesOverloads01.types +++ b/tests/baselines/reference/stringLiteralTypesOverloads01.types @@ -58,7 +58,7 @@ function getFalsyPrimitive(x: PrimitiveName): number | string | boolean { >"boolean" : "boolean" return false; ->false : boolean +>false : false } // Should be unreachable. diff --git a/tests/baselines/reference/symbolProperty18.types b/tests/baselines/reference/symbolProperty18.types index 772e6aff2f7b0..681f86af11794 100644 --- a/tests/baselines/reference/symbolProperty18.types +++ b/tests/baselines/reference/symbolProperty18.types @@ -40,11 +40,11 @@ var str = i[Symbol.toStringTag](); >toStringTag : symbol i[Symbol.toPrimitive] = false; ->i[Symbol.toPrimitive] = false : boolean +>i[Symbol.toPrimitive] = false : false >i[Symbol.toPrimitive] : boolean >i : { [Symbol.iterator]: number; [Symbol.toStringTag](): string; [Symbol.toPrimitive]: boolean; } >Symbol.toPrimitive : symbol >Symbol : SymbolConstructor >toPrimitive : symbol ->false : boolean +>false : false diff --git a/tests/baselines/reference/symbolProperty21.errors.txt b/tests/baselines/reference/symbolProperty21.errors.txt index fa9cabc9b6192..766af0659e8a9 100644 --- a/tests/baselines/reference/symbolProperty21.errors.txt +++ b/tests/baselines/reference/symbolProperty21.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/es6/Symbols/symbolProperty21.ts(10,5): error TS2345: Argument of type '{ [Symbol.isConcatSpreadable]: string; [Symbol.toPrimitive]: number; [Symbol.unscopables]: boolean; }' is not assignable to parameter of type 'I'. +tests/cases/conformance/es6/Symbols/symbolProperty21.ts(10,5): error TS2345: Argument of type '{ [Symbol.isConcatSpreadable]: string; [Symbol.toPrimitive]: number; [Symbol.unscopables]: true; }' is not assignable to parameter of type 'I'. Object literal may only specify known properties, and '[Symbol.toPrimitive]' does not exist in type 'I'. @@ -14,7 +14,7 @@ tests/cases/conformance/es6/Symbols/symbolProperty21.ts(10,5): error TS2345: Arg [Symbol.isConcatSpreadable]: "", [Symbol.toPrimitive]: 0, ~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2345: Argument of type '{ [Symbol.isConcatSpreadable]: string; [Symbol.toPrimitive]: number; [Symbol.unscopables]: boolean; }' is not assignable to parameter of type 'I'. +!!! error TS2345: Argument of type '{ [Symbol.isConcatSpreadable]: string; [Symbol.toPrimitive]: number; [Symbol.unscopables]: true; }' is not assignable to parameter of type 'I'. !!! error TS2345: Object literal may only specify known properties, and '[Symbol.toPrimitive]' does not exist in type 'I'. [Symbol.unscopables]: true }); \ No newline at end of file diff --git a/tests/baselines/reference/targetTypeArgs.types b/tests/baselines/reference/targetTypeArgs.types index cda814d52c52f..48dd35401b419 100644 --- a/tests/baselines/reference/targetTypeArgs.types +++ b/tests/baselines/reference/targetTypeArgs.types @@ -35,11 +35,11 @@ foo(function(x) { x }); >["hello"] : string[] >"hello" : string >every : (callbackfn: (value: string, index: number, array: string[]) => boolean, thisArg?: any) => boolean ->function(v,i,a) {return true;} : (v: string, i: number, a: string[]) => boolean +>function(v,i,a) {return true;} : (v: string, i: number, a: string[]) => true >v : string >i : number >a : string[] ->true : boolean +>true : true [1].every(function(v,i,a) {return true;}); >[1].every(function(v,i,a) {return true;}) : boolean @@ -47,11 +47,11 @@ foo(function(x) { x }); >[1] : number[] >1 : number >every : (callbackfn: (value: number, index: number, array: number[]) => boolean, thisArg?: any) => boolean ->function(v,i,a) {return true;} : (v: number, i: number, a: number[]) => boolean +>function(v,i,a) {return true;} : (v: number, i: number, a: number[]) => true >v : number >i : number >a : number[] ->true : boolean +>true : true [1].every(function(v,i,a) {return true;}); >[1].every(function(v,i,a) {return true;}) : boolean @@ -59,11 +59,11 @@ foo(function(x) { x }); >[1] : number[] >1 : number >every : (callbackfn: (value: number, index: number, array: number[]) => boolean, thisArg?: any) => boolean ->function(v,i,a) {return true;} : (v: number, i: number, a: number[]) => boolean +>function(v,i,a) {return true;} : (v: number, i: number, a: number[]) => true >v : number >i : number >a : number[] ->true : boolean +>true : true ["s"].every(function(v,i,a) {return true;}); >["s"].every(function(v,i,a) {return true;}) : boolean @@ -71,11 +71,11 @@ foo(function(x) { x }); >["s"] : string[] >"s" : string >every : (callbackfn: (value: string, index: number, array: string[]) => boolean, thisArg?: any) => boolean ->function(v,i,a) {return true;} : (v: string, i: number, a: string[]) => boolean +>function(v,i,a) {return true;} : (v: string, i: number, a: string[]) => true >v : string >i : number >a : string[] ->true : boolean +>true : true ["s"].forEach(function(v,i,a) { v }); >["s"].forEach(function(v,i,a) { v }) : void diff --git a/tests/baselines/reference/twoMergedInterfacesWithDifferingOverloads.types b/tests/baselines/reference/twoMergedInterfacesWithDifferingOverloads.types index e9ed00319280f..d9702b5995427 100644 --- a/tests/baselines/reference/twoMergedInterfacesWithDifferingOverloads.types +++ b/tests/baselines/reference/twoMergedInterfacesWithDifferingOverloads.types @@ -63,7 +63,7 @@ var r = b.foo(true); // returns Date >b.foo : { (x: boolean): number; (x: string): string; (x: boolean): Date; (x: Date): string; } >b : B >foo : { (x: boolean): number; (x: string): string; (x: boolean): Date; (x: Date): string; } ->true : boolean +>true : true // add generic overload interface C { diff --git a/tests/baselines/reference/twoMergedInterfacesWithDifferingOverloads2.types b/tests/baselines/reference/twoMergedInterfacesWithDifferingOverloads2.types index afbafba49208a..a796d65cf61a2 100644 --- a/tests/baselines/reference/twoMergedInterfacesWithDifferingOverloads2.types +++ b/tests/baselines/reference/twoMergedInterfacesWithDifferingOverloads2.types @@ -83,13 +83,13 @@ module G { >r2 : boolean >a(true) : boolean >a : A ->true : boolean +>true : true var r3 = a(true, 2); >r3 : boolean >a(true, 2) : boolean >a : A ->true : boolean +>true : true >2 : number var r4 = a(1, true); @@ -97,5 +97,5 @@ module G { >a(1, true) : number >a : A >1 : number ->true : boolean +>true : true } diff --git a/tests/baselines/reference/typeAliases.types b/tests/baselines/reference/typeAliases.types index d6bce143c9b26..06dfd402829dc 100644 --- a/tests/baselines/reference/typeAliases.types +++ b/tests/baselines/reference/typeAliases.types @@ -231,9 +231,9 @@ f16(x); var y: StringAndBoolean = ["1", false]; >y : [string, boolean] >StringAndBoolean : [string, boolean] ->["1", false] : [string, boolean] +>["1", false] : [string, false] >"1" : string ->false : boolean +>false : false y[0].toLowerCase(); >y[0].toLowerCase() : string diff --git a/tests/baselines/reference/typeGuardFunction.types b/tests/baselines/reference/typeGuardFunction.types index 1e2be413a2b4d..00dfc39f04a8b 100644 --- a/tests/baselines/reference/typeGuardFunction.types +++ b/tests/baselines/reference/typeGuardFunction.types @@ -151,7 +151,7 @@ class D { >C : C return true; ->true : boolean +>true : true } } @@ -163,7 +163,7 @@ let f1 = (p1: A): p1 is C => false; >A : A >p1 : any >C : C ->false : boolean +>false : false // Function type declare function f2(p1: (p1: A) => p1 is C); @@ -185,7 +185,7 @@ f2(function(p1: A): p1 is C { >C : C return true; ->true : boolean +>true : true }); diff --git a/tests/baselines/reference/typeGuardFunctionOfFormThis.types b/tests/baselines/reference/typeGuardFunctionOfFormThis.types index 66d1a4b5b11bb..7b4b1fc76c8a9 100644 --- a/tests/baselines/reference/typeGuardFunctionOfFormThis.types +++ b/tests/baselines/reference/typeGuardFunctionOfFormThis.types @@ -259,13 +259,13 @@ if (crate.isSundries()) { >isSundries : () => this is Crate crate.contents.broken = true; ->crate.contents.broken = true : boolean +>crate.contents.broken = true : true >crate.contents.broken : boolean >crate.contents : Sundries >crate : Crate >contents : Sundries >broken : boolean ->true : boolean +>true : true } else if (crate.isSupplies()) { >crate.isSupplies() : boolean @@ -274,13 +274,13 @@ else if (crate.isSupplies()) { >isSupplies : () => this is Crate crate.contents.spoiled = true; ->crate.contents.spoiled = true : boolean +>crate.contents.spoiled = true : true >crate.contents.spoiled : boolean >crate.contents : Supplies >crate : Crate >contents : Supplies >spoiled : boolean ->true : boolean +>true : true } // Matching guards should be assignable diff --git a/tests/baselines/reference/typeGuardNesting.types b/tests/baselines/reference/typeGuardNesting.types index 6c2df126df122..2417dbe797c41 100644 --- a/tests/baselines/reference/typeGuardNesting.types +++ b/tests/baselines/reference/typeGuardNesting.types @@ -37,7 +37,7 @@ if ((typeof strOrBool === 'boolean' && !strOrBool) || typeof strOrBool === 'stri >strOrBool : string | boolean >'boolean' : "boolean" >strOrBool : boolean ->false : boolean +>false : false let label2: string = (typeof strOrBool !== 'boolean') ? strOrBool : "string"; >label2 : string @@ -59,7 +59,7 @@ if ((typeof strOrBool === 'boolean' && !strOrBool) || typeof strOrBool === 'stri >strOrBool : string | boolean >'string' : "string" >strOrBool : boolean ->false : boolean +>false : false } if ((typeof strOrBool !== 'string' && !strOrBool) || typeof strOrBool !== 'boolean') { @@ -97,7 +97,7 @@ if ((typeof strOrBool !== 'string' && !strOrBool) || typeof strOrBool !== 'boole >strOrBool : string | boolean >'boolean' : "boolean" >strOrBool : boolean ->false : boolean +>false : false let label2: string = (typeof strOrBool !== 'boolean') ? strOrBool : "string"; >label2 : string @@ -119,6 +119,6 @@ if ((typeof strOrBool !== 'string' && !strOrBool) || typeof strOrBool !== 'boole >strOrBool : string | boolean >'string' : "string" >strOrBool : boolean ->false : boolean +>false : false } diff --git a/tests/baselines/reference/typeGuardOfFormIsType.types b/tests/baselines/reference/typeGuardOfFormIsType.types index e2059be7b637e..53b2fab53f4ed 100644 --- a/tests/baselines/reference/typeGuardOfFormIsType.types +++ b/tests/baselines/reference/typeGuardOfFormIsType.types @@ -35,7 +35,7 @@ function isC1(x: any): x is C1 { >C1 : C1 return true; ->true : boolean +>true : true } function isC2(x: any): x is C2 { @@ -45,7 +45,7 @@ function isC2(x: any): x is C2 { >C2 : C2 return true; ->true : boolean +>true : true } function isD1(x: any): x is D1 { @@ -55,7 +55,7 @@ function isD1(x: any): x is D1 { >D1 : D1 return true; ->true : boolean +>true : true } var c1Orc2: C1 | C2; diff --git a/tests/baselines/reference/typeGuardOfFormIsTypeOnInterfaces.types b/tests/baselines/reference/typeGuardOfFormIsTypeOnInterfaces.types index ea169e954138c..1295d0f612335 100644 --- a/tests/baselines/reference/typeGuardOfFormIsTypeOnInterfaces.types +++ b/tests/baselines/reference/typeGuardOfFormIsTypeOnInterfaces.types @@ -54,7 +54,7 @@ function isC1(x: any): x is C1 { >C1 : C1 return true; ->true : boolean +>true : true } function isC2(x: any): x is C2 { @@ -64,7 +64,7 @@ function isC2(x: any): x is C2 { >C2 : C2 return true; ->true : boolean +>true : true } function isD1(x: any): x is D1 { @@ -74,7 +74,7 @@ function isD1(x: any): x is D1 { >D1 : D1 return true; ->true : boolean +>true : true } var c1: C1; diff --git a/tests/baselines/reference/typeGuardsInDoStatement.types b/tests/baselines/reference/typeGuardsInDoStatement.types index 58b6343a2f5a0..bc1e56bb1e416 100644 --- a/tests/baselines/reference/typeGuardsInDoStatement.types +++ b/tests/baselines/reference/typeGuardsInDoStatement.types @@ -7,13 +7,13 @@ function a(x: string | number | boolean) { >x : string | number | boolean x = true; ->x = true : boolean +>x = true : true >x : string | number | boolean ->true : boolean +>true : true do { x; // boolean | string ->x : string | boolean +>x : string | true x = undefined; >x = undefined : undefined @@ -34,13 +34,13 @@ function b(x: string | number | boolean) { >x : string | number | boolean x = true; ->x = true : boolean +>x = true : true >x : string | number | boolean ->true : boolean +>true : true do { x; // boolean | string ->x : string | boolean +>x : string | true if (cond) continue; >cond : boolean diff --git a/tests/baselines/reference/typeGuardsOnClassProperty.types b/tests/baselines/reference/typeGuardsOnClassProperty.types index 85af4540fb9c0..afff0afb03ff5 100644 --- a/tests/baselines/reference/typeGuardsOnClassProperty.types +++ b/tests/baselines/reference/typeGuardsOnClassProperty.types @@ -67,15 +67,15 @@ var o: { >prop2 : string | boolean } = { ->{ prop1: "string" , prop2: true } : { prop1: string; prop2: boolean; } +>{ prop1: "string" , prop2: true } : { prop1: string; prop2: true; } prop1: "string" , >prop1 : string >"string" : string prop2: true ->prop2 : boolean ->true : boolean +>prop2 : true +>true : true } if (typeof o.prop1 === "string" && o.prop1.toLowerCase()) {} diff --git a/tests/baselines/reference/typeParameterAsTypeParameterConstraintTransitively.types b/tests/baselines/reference/typeParameterAsTypeParameterConstraintTransitively.types index e2d41c5c136c6..680e86f5c85d2 100644 --- a/tests/baselines/reference/typeParameterAsTypeParameterConstraintTransitively.types +++ b/tests/baselines/reference/typeParameterAsTypeParameterConstraintTransitively.types @@ -62,13 +62,13 @@ foo({ x: 1 }, { x: 1, y: '' }, { x: 2, y: '', z: true }); >1 : number >y : string >'' : string ->{ x: 2, y: '', z: true } : { x: number; y: string; z: boolean; } +>{ x: 2, y: '', z: true } : { x: number; y: string; z: true; } >x : number >2 : number >y : string >'' : string ->z : boolean ->true : boolean +>z : true +>true : true foo(a, b, c); >foo(a, b, c) : C @@ -82,13 +82,13 @@ foo(a, b, { foo: 1, bar: '', hm: true }); >foo : (x: T, y: U, z: V) => V >a : A >b : B ->{ foo: 1, bar: '', hm: true } : { foo: number; bar: string; hm: boolean; } +>{ foo: 1, bar: '', hm: true } : { foo: number; bar: string; hm: true; } >foo : number >1 : number >bar : string >'' : string ->hm : boolean ->true : boolean +>hm : true +>true : true foo((x: number, y) => { }, (x) => { }, () => { }); >foo((x: number, y) => { }, (x) => { }, () => { }) : () => void diff --git a/tests/baselines/reference/typeParameterAsTypeParameterConstraintTransitively2.types b/tests/baselines/reference/typeParameterAsTypeParameterConstraintTransitively2.types index 3d51ad80832cf..145bf081b18f3 100644 --- a/tests/baselines/reference/typeParameterAsTypeParameterConstraintTransitively2.types +++ b/tests/baselines/reference/typeParameterAsTypeParameterConstraintTransitively2.types @@ -62,13 +62,13 @@ foo({ x: 1 }, { x: 1, y: '' }, { x: 2, y: 2, z: true }); >1 : number >y : string >'' : string ->{ x: 2, y: 2, z: true } : { x: number; y: number; z: boolean; } +>{ x: 2, y: 2, z: true } : { x: number; y: number; z: true; } >x : number >2 : number >y : number >2 : number ->z : boolean ->true : boolean +>z : true +>true : true foo(a, b, a); >foo(a, b, a) : A @@ -81,13 +81,13 @@ foo(a, { foo: 1, bar: '', hm: true }, b); >foo(a, { foo: 1, bar: '', hm: true }, b) : B >foo : (x: T, y: U, z: V) => V >a : A ->{ foo: 1, bar: '', hm: true } : { foo: number; bar: string; hm: boolean; } +>{ foo: 1, bar: '', hm: true } : { foo: number; bar: string; hm: true; } >foo : number >1 : number >bar : string >'' : string ->hm : boolean ->true : boolean +>hm : true +>true : true >b : B foo((x: number, y: string) => { }, (x, y: boolean) => { }, () => { }); diff --git a/tests/baselines/reference/typeofOperatorWithBooleanType.types b/tests/baselines/reference/typeofOperatorWithBooleanType.types index 043307cfb0051..edf3c4e08712a 100644 --- a/tests/baselines/reference/typeofOperatorWithBooleanType.types +++ b/tests/baselines/reference/typeofOperatorWithBooleanType.types @@ -6,7 +6,7 @@ var BOOLEAN: boolean; function foo(): boolean { return true; } >foo : () => boolean ->true : boolean +>true : true class A { >A : A diff --git a/tests/baselines/reference/underscoreTest1.types b/tests/baselines/reference/underscoreTest1.types index 5950e50efa1d6..ac794e1f2f97c 100644 --- a/tests/baselines/reference/underscoreTest1.types +++ b/tests/baselines/reference/underscoreTest1.types @@ -235,8 +235,8 @@ _.all([true, 1, null, 'yes'], _.identity); >_.all : { (list: T[], iterator?: Iterator, context?: any): boolean; (list: Dictionary, iterator?: Iterator, context?: any): boolean; } >_ : Underscore.Static >all : { (list: T[], iterator?: Iterator, context?: any): boolean; (list: Dictionary, iterator?: Iterator, context?: any): boolean; } ->[true, 1, null, 'yes'] : (string | number | boolean)[] ->true : boolean +>[true, 1, null, 'yes'] : (string | number | true)[] +>true : true >1 : number >null : null >'yes' : string @@ -249,11 +249,11 @@ _.any([null, 0, 'yes', false]); >_.any : { (list: T[], iterator?: Iterator, context?: any): boolean; (list: Dictionary, iterator?: Iterator, context?: any): boolean; } >_ : Underscore.Static >any : { (list: T[], iterator?: Iterator, context?: any): boolean; (list: Dictionary, iterator?: Iterator, context?: any): boolean; } ->[null, 0, 'yes', false] : (string | number | boolean)[] +>[null, 0, 'yes', false] : (string | number | false)[] >null : null >0 : number >'yes' : string ->false : boolean +>false : false _.contains([1, 2, 3], 3); >_.contains([1, 2, 3], 3) : boolean @@ -512,10 +512,10 @@ _.compact([0, 1, false, 2, '', 3]); >_.compact : (list: T[]) => T[] >_ : Underscore.Static >compact : (list: T[]) => T[] ->[0, 1, false, 2, '', 3] : (string | number | boolean)[] +>[0, 1, false, 2, '', 3] : (string | number | false)[] >0 : number >1 : number ->false : boolean +>false : false >2 : number >'' : string >3 : number @@ -571,7 +571,7 @@ _.flatten([1, [2], [3, [[4]]]], true); >[[4]] : number[][] >[4] : number[] >4 : number ->true : boolean +>true : true _.without([1, 2, 1, 0, 3, 1, 4], 0, 1); >_.without([1, 2, 1, 0, 3, 1, 4], 0, 1) : number[] @@ -668,9 +668,9 @@ _.zip(['moe', 'larry', 'curly'], [30, 40, 50], [true, false, false]); >40 : number >50 : number >[true, false, false] : boolean[] ->true : boolean ->false : boolean ->false : boolean +>true : true +>false : false +>false : false _.object(['moe', 'larry', 'curly'], [30, 40, 50]); >_.object(['moe', 'larry', 'curly'], [30, 40, 50]) : any diff --git a/tests/baselines/reference/unionTypeCallSignatures2.types b/tests/baselines/reference/unionTypeCallSignatures2.types index ce49e9ba1c7c1..f55875eac44a7 100644 --- a/tests/baselines/reference/unionTypeCallSignatures2.types +++ b/tests/baselines/reference/unionTypeCallSignatures2.types @@ -81,8 +81,8 @@ var a1 = f1([true, false]); // boolean[] >f1([true, false]) : boolean[] >f1 : A | B | C >[true, false] : boolean[] ->true : boolean ->false : boolean +>true : true +>false : false var f2: C | B | A; >f2 : A | B | C @@ -107,8 +107,8 @@ var a2 = f2([true, false]); // boolean[] >f2([true, false]) : boolean[] >f2 : A | B | C >[true, false] : boolean[] ->true : boolean ->false : boolean +>true : true +>false : false var f3: B | A | C; >f3 : A | B | C @@ -133,7 +133,7 @@ var a3 = f3([true, false]); // boolean[] >f3([true, false]) : boolean[] >f3 : A | B | C >[true, false] : boolean[] ->true : boolean ->false : boolean +>true : true +>false : false diff --git a/tests/baselines/reference/unionTypeInference.types b/tests/baselines/reference/unionTypeInference.types index efc150da91803..c1980206cc159 100644 --- a/tests/baselines/reference/unionTypeInference.types +++ b/tests/baselines/reference/unionTypeInference.types @@ -77,9 +77,9 @@ var b1 = g(["string", true]); >b1 : boolean >g(["string", true]) : boolean >g : (value: [string, T]) => T ->["string", true] : [string, boolean] +>["string", true] : [string, true] >"string" : string ->true : boolean +>true : true function h(x: string|boolean|T): T { >h : (x: string | boolean | T) => T diff --git a/tests/baselines/reference/voidOperatorWithBooleanType.types b/tests/baselines/reference/voidOperatorWithBooleanType.types index 060d2d545c68e..7a35ad3367ff5 100644 --- a/tests/baselines/reference/voidOperatorWithBooleanType.types +++ b/tests/baselines/reference/voidOperatorWithBooleanType.types @@ -5,7 +5,7 @@ var BOOLEAN: boolean; function foo(): boolean { return true; } >foo : () => boolean ->true : boolean +>true : true class A { >A : A