Skip to content

Commit 3d92ade

Browse files
committed
Fix widening in object literal property assignments
1 parent bf084f1 commit 3d92ade

19 files changed

+38
-35
lines changed

src/compiler/checker.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1354,10 +1354,13 @@ module ts {
13541354
}
13551355
// Use the type of the initializer expression if one is present
13561356
if (declaration.initializer) {
1357-
var unwidenedType = checkAndMarkExpression(declaration.initializer);
1358-
var type = getWidenedType(unwidenedType);
1359-
if (type !== unwidenedType) {
1360-
checkImplicitAny(type);
1357+
var type = checkAndMarkExpression(declaration.initializer);
1358+
if (declaration.kind !== SyntaxKind.PropertyAssignment) {
1359+
var unwidenedType = type;
1360+
type = getWidenedType(type);
1361+
if (type !== unwidenedType) {
1362+
checkImplicitAny(type);
1363+
}
13611364
}
13621365
return type;
13631366
}

tests/baselines/reference/arrayBestCommonTypes.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ class f {
222222
>base : base
223223
>[ { x: undefined, y: new base() }, { x: '', y: new derived() } ] : { x: string; y: base; }[]
224224
>{ x: undefined, y: new base() } : { x: undefined; y: base; }
225-
>x : any
225+
>x : undefined
226226
>undefined : undefined
227227
>y : base
228228
>new base() : base

tests/baselines/reference/declFileRegressionTests.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
var n = { w: null, x: '', y: () => { }, z: 32 };
55
>n : { w: any; x: string; y: () => void; z: number; }
66
>{ w: null, x: '', y: () => { }, z: 32 } : { w: null; x: string; y: () => void; z: number; }
7-
>w : any
7+
>w : null
88
>x : string
99
>y : () => void
1010
>() => { } : () => void

tests/baselines/reference/declInput3.types

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ class bar {
1616
>a : bar
1717
><bar>null : bar
1818
>bar : bar
19-
>b : any
19+
>b : undefined
2020
>undefined : undefined
21-
>c : any
21+
>c : undefined
2222
>void 4 : undefined
2323

2424
public h(x = 4, y = null, z = '') { x++; }

tests/baselines/reference/decrementOperatorWithAnyOtherType.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ var obj = {x:1,y:null};
1515
>obj : { x: number; y: any; }
1616
>{x:1,y:null} : { x: number; y: null; }
1717
>x : number
18-
>y : any
18+
>y : null
1919

2020
class A {
2121
>A : A

tests/baselines/reference/doNotWidenAtObjectLiteralPropertyAssignment.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,5 @@ var test: IIntervalTreeNode[] = [{ interval: { begin: 0 }, children: null }]; //
2626
>interval : { begin: number; }
2727
>{ begin: 0 } : { begin: number; }
2828
>begin : number
29-
>children : any
29+
>children : null
3030

tests/baselines/reference/forStatementsMultipleValidDecl.types

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ for (var p: Point = { x: 0, y: undefined }; ;) { }
3939
>Point : Point
4040
>{ x: 0, y: undefined } : { x: number; y: undefined; }
4141
>x : number
42-
>y : any
42+
>y : undefined
4343
>undefined : undefined
4444

4545
for (var p = { x: 1, y: <number>undefined }; ;) { }
@@ -65,7 +65,7 @@ for (var p = <{ x: number; y: number; }>{ x: 0, y: undefined }; ;) { }
6565
>y : number
6666
>{ x: 0, y: undefined } : { x: number; y: undefined; }
6767
>x : number
68-
>y : any
68+
>y : undefined
6969
>undefined : undefined
7070

7171
for (var p: typeof p; ;) { }

tests/baselines/reference/functionImplementations.types

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -253,8 +253,8 @@ function opt2(n = { x: null, y: undefined }) {
253253
>opt2 : (n?: { x: any; y: any; }) => void
254254
>n : { x: any; y: any; }
255255
>{ x: null, y: undefined } : { x: null; y: undefined; }
256-
>x : any
257-
>y : any
256+
>x : null
257+
>y : undefined
258258
>undefined : undefined
259259

260260
var m = n;

tests/baselines/reference/incrementOperatorWithAnyOtherType.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ var obj = {x:1,y:null};
1515
>obj : { x: number; y: any; }
1616
>{x:1,y:null} : { x: number; y: null; }
1717
>x : number
18-
>y : any
18+
>y : null
1919

2020
class A {
2121
>A : A

tests/baselines/reference/interfaceWithPropertyOfEveryType.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ var a: Foo = {
9595
>{} : {}
9696

9797
e: null ,
98-
>e : any
98+
>e : null
9999

100100
f: [1],
101101
>f : number[]

tests/baselines/reference/null.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ var w:I={x:null,y:3};
4141
>w : I
4242
>I : I
4343
>{x:null,y:3} : { x: null; y: number; }
44-
>x : any
44+
>x : null
4545
>y : number
4646

4747

tests/baselines/reference/objectLiteralWidened.types

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ var x = {
66
>{ foo: null, bar: undefined} : { foo: null; bar: undefined; }
77

88
foo: null,
9-
>foo : any
9+
>foo : null
1010

1111
bar: undefined
12-
>bar : any
12+
>bar : undefined
1313
>undefined : undefined
1414
}
1515

@@ -18,17 +18,17 @@ var y = {
1818
>{ foo: null, bar: { baz: null, boo: undefined }} : { foo: null; bar: { baz: null; boo: undefined; }; }
1919

2020
foo: null,
21-
>foo : any
21+
>foo : null
2222

2323
bar: {
24-
>bar : { baz: any; boo: any; }
24+
>bar : { baz: null; boo: undefined; }
2525
>{ baz: null, boo: undefined } : { baz: null; boo: undefined; }
2626

2727
baz: null,
28-
>baz : any
28+
>baz : null
2929

3030
boo: undefined
31-
>boo : any
31+
>boo : undefined
3232
>undefined : undefined
3333
}
3434
}

tests/baselines/reference/overloadResolutionOverNonCTObjectLit.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ module Bugs {
6161
>startIndex : number
6262
>type : string
6363
>bracket : number
64-
>state : any
64+
>state : null
6565
>length : number
6666
}
6767
}

tests/baselines/reference/propertyNameWithoutTypeAnnotation.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ var b = {
2525
>{ foo: null} : { foo: null; }
2626

2727
foo: null
28-
>foo : any
28+
>foo : null
2929
}
3030

3131
// These should all be of type 'any'

tests/baselines/reference/typeArgInference2.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ var z3 = foo({ name: null }); // { name: any }
3131
>foo({ name: null }) : { name: any; }
3232
>foo : <T extends Item>(x?: T, y?: T) => T
3333
>{ name: null } : { name: null; }
34-
>name : any
34+
>name : null
3535

3636
var z4 = foo({ name: "abc" }); // { name: string }
3737
>z4 : { name: string; }

tests/baselines/reference/typeArgInferenceWithNull.types

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ fn5({ x: null });
2222
>fn5({ x: null }) : void
2323
>fn5 : <T extends { x: string; }>(n: T) => void
2424
>{ x: null } : { x: null; }
25-
>x : any
25+
>x : null
2626

2727
function fn6<T extends { x: string }>(n: T, fun: (x: T) => void, n2: T) { }
2828
>fn6 : <T extends { x: string; }>(n: T, fun: (x: T) => void, n2: T) => void
@@ -40,7 +40,7 @@ fn6({ x: null }, y => { }, { x: "" }); // y has type { x: any }, but ideally wou
4040
>fn6({ x: null }, y => { }, { x: "" }) : void
4141
>fn6 : <T extends { x: string; }>(n: T, fun: (x: T) => void, n2: T) => void
4242
>{ x: null } : { x: null; }
43-
>x : any
43+
>x : null
4444
>y => { } : (y: { x: string; }) => void
4545
>y : { x: string; }
4646
>{ x: "" } : { x: string; }

tests/baselines/reference/undefinedArgumentInference.types

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ var z1 = foo1({ x: undefined, y: undefined });
1919
>foo1({ x: undefined, y: undefined }) : any
2020
>foo1 : <T>(f1: { x: T; y: T; }) => T
2121
>{ x: undefined, y: undefined } : { x: undefined; y: undefined; }
22-
>x : any
22+
>x : undefined
2323
>undefined : undefined
24-
>y : any
24+
>y : undefined
2525
>undefined : undefined
2626

tests/baselines/reference/validMultipleVariableDeclarations.types

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ var p: Point = { x: 0, y: undefined };
4747
>Point : Point
4848
>{ x: 0, y: undefined } : { x: number; y: undefined; }
4949
>x : number
50-
>y : any
50+
>y : undefined
5151
>undefined : undefined
5252

5353
var p = { x: 1, y: <number>undefined };
@@ -73,7 +73,7 @@ var p = <{ x: number; y: number; }>{ x: 0, y: undefined };
7373
>y : number
7474
>{ x: 0, y: undefined } : { x: number; y: undefined; }
7575
>x : number
76-
>y : any
76+
>y : undefined
7777
>undefined : undefined
7878

7979
var p: typeof p;

tests/baselines/reference/widenedTypes1.types

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ var b = undefined;
99
var c = {x: null};
1010
>c : { x: any; }
1111
>{x: null} : { x: null; }
12-
>x : any
12+
>x : null
1313

1414
var d = [{x: null}];
1515
>d : { x: any; }[]
1616
>[{x: null}] : { x: null; }[]
1717
>{x: null} : { x: null; }
18-
>x : any
18+
>x : null
1919

2020
var f = [null, null];
2121
>f : any[]
@@ -31,6 +31,6 @@ var h = [{x: undefined}];
3131
>h : { x: any; }[]
3232
>[{x: undefined}] : { x: undefined; }[]
3333
>{x: undefined} : { x: undefined; }
34-
>x : any
34+
>x : undefined
3535
>undefined : undefined
3636

0 commit comments

Comments
 (0)