Skip to content

Commit b61c722

Browse files
committed
Merge pull request #649 from Microsoft/propertyAssignmentWidening
Fix widening in object literal property assignments
2 parents 86691f0 + b9ae6ce commit b61c722

19 files changed

+39
-35
lines changed

src/compiler/checker.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1354,10 +1354,14 @@ 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+
// Widening of property assignments is handled by checkObjectLiteral, exclude them here
1359+
if (declaration.kind !== SyntaxKind.PropertyAssignment) {
1360+
var unwidenedType = type;
1361+
type = getWidenedType(type);
1362+
if (type !== unwidenedType) {
1363+
checkImplicitAny(type);
1364+
}
13611365
}
13621366
return type;
13631367
}

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[]

0 commit comments

Comments
 (0)