Skip to content

Commit a8633ee

Browse files
committed
Merge pull request #7029 from Microsoft/implicitIndexSignatures
Implicit index signatures
2 parents 3820dfa + a1040f0 commit a8633ee

File tree

129 files changed

+1048
-502
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

129 files changed

+1048
-502
lines changed

src/compiler/checker.ts

+112-99
Large diffs are not rendered by default.

src/compiler/diagnosticMessages.json

+4
Original file line numberDiff line numberDiff line change
@@ -1703,6 +1703,10 @@
17031703
"category": "Error",
17041704
"code": 2529
17051705
},
1706+
"Property '{0}' is incompatible with index signature.": {
1707+
"category": "Error",
1708+
"code": 2530
1709+
},
17061710
"JSX element attributes type '{0}' may not be a union type.": {
17071711
"category": "Error",
17081712
"code": 2600

tests/baselines/reference/augmentedTypeAssignmentCompatIndexSignature.errors.txt

+1-6
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1-
tests/cases/conformance/types/members/augmentedTypeAssignmentCompatIndexSignature.ts(15,5): error TS2322: Type '{}' is not assignable to type '{ [n: number]: Foo; }'.
2-
Index signature is missing in type '{}'.
31
tests/cases/conformance/types/members/augmentedTypeAssignmentCompatIndexSignature.ts(19,5): error TS2322: Type '() => void' is not assignable to type '{ [n: number]: Bar; }'.
42
Index signature is missing in type '() => void'.
53

64

7-
==== tests/cases/conformance/types/members/augmentedTypeAssignmentCompatIndexSignature.ts (2 errors) ====
5+
==== tests/cases/conformance/types/members/augmentedTypeAssignmentCompatIndexSignature.ts (1 errors) ====
86
interface Foo { a }
97
interface Bar { b }
108

@@ -20,9 +18,6 @@ tests/cases/conformance/types/members/augmentedTypeAssignmentCompatIndexSignatur
2018
var f = () => { };
2119

2220
var v1: {
23-
~~
24-
!!! error TS2322: Type '{}' is not assignable to type '{ [n: number]: Foo; }'.
25-
!!! error TS2322: Index signature is missing in type '{}'.
2621
[n: number]: Foo
2722
} = o; // Should be allowed
2823

tests/baselines/reference/badOverloadError.types

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ function method() {
66
>dictionary : { [index: string]: string; }
77
><{ [index: string]: string; }>{} : { [index: string]: string; }
88
>index : string
9-
>{} : { [x: string]: undefined; }
9+
>{} : {}
1010
}
1111

tests/baselines/reference/bestCommonTypeWithContextualTyping.types

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ var obj: { [s: string]: Contextual } = { s: e }; // { s: Ellement; [s: string]:
3636
>obj : { [s: string]: Contextual; }
3737
>s : string
3838
>Contextual : Contextual
39-
>{ s: e } : { [x: string]: Ellement; s: Ellement; }
39+
>{ s: e } : { s: Ellement; }
4040
>s : Ellement
4141
>e : Ellement
4242

tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.errors.txt

+2-50
Large diffs are not rendered by default.

tests/baselines/reference/compoundAdditionAssignmentLHSCanBeAssigned.types

+1-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ x2 += E.a;
9898
x2 += {};
9999
>x2 += {} : string
100100
>x2 : string
101-
>{} : { [x: number]: undefined; }
101+
>{} : {}
102102

103103
x2 += null;
104104
>x2 += null : string

tests/baselines/reference/computedPropertyNames10_ES5.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ var a: any;
99
>a : any
1010

1111
var v = {
12-
>v : { [0](): void; [""](): void; }
13-
>{ [s]() { }, [n]() { }, [s + s]() { }, [s + n]() { }, [+s]() { }, [""]() { }, [0]() { }, [a]() { }, [<any>true]() { }, [`hello bye`]() { }, [`hello ${a} bye`]() { }} : { [0](): void; [""](): void; }
12+
>v : { [x: string]: () => void; [x: number]: () => void; [0](): void; [""](): void; }
13+
>{ [s]() { }, [n]() { }, [s + s]() { }, [s + n]() { }, [+s]() { }, [""]() { }, [0]() { }, [a]() { }, [<any>true]() { }, [`hello bye`]() { }, [`hello ${a} bye`]() { }} : { [x: string]: () => void; [x: number]: () => void; [0](): void; [""](): void; }
1414

1515
[s]() { },
1616
>s : string

tests/baselines/reference/computedPropertyNames10_ES6.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ var a: any;
99
>a : any
1010

1111
var v = {
12-
>v : { [0](): void; [""](): void; }
13-
>{ [s]() { }, [n]() { }, [s + s]() { }, [s + n]() { }, [+s]() { }, [""]() { }, [0]() { }, [a]() { }, [<any>true]() { }, [`hello bye`]() { }, [`hello ${a} bye`]() { }} : { [0](): void; [""](): void; }
12+
>v : { [x: string]: () => void; [x: number]: () => void; [0](): void; [""](): void; }
13+
>{ [s]() { }, [n]() { }, [s + s]() { }, [s + n]() { }, [+s]() { }, [""]() { }, [0]() { }, [a]() { }, [<any>true]() { }, [`hello bye`]() { }, [`hello ${a} bye`]() { }} : { [x: string]: () => void; [x: number]: () => void; [0](): void; [""](): void; }
1414

1515
[s]() { },
1616
>s : string

tests/baselines/reference/computedPropertyNames11_ES5.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ var a: any;
99
>a : any
1010

1111
var v = {
12-
>v : { readonly [0]: number; [""]: any; }
13-
>{ get [s]() { return 0; }, set [n](v) { }, get [s + s]() { return 0; }, set [s + n](v) { }, get [+s]() { return 0; }, set [""](v) { }, get [0]() { return 0; }, set [a](v) { }, get [<any>true]() { return 0; }, set [`hello bye`](v) { }, get [`hello ${a} bye`]() { return 0; }} : { readonly [0]: number; [""]: any; }
12+
>v : { [x: string]: any; [x: number]: any; readonly [0]: number; [""]: any; }
13+
>{ get [s]() { return 0; }, set [n](v) { }, get [s + s]() { return 0; }, set [s + n](v) { }, get [+s]() { return 0; }, set [""](v) { }, get [0]() { return 0; }, set [a](v) { }, get [<any>true]() { return 0; }, set [`hello bye`](v) { }, get [`hello ${a} bye`]() { return 0; }} : { [x: string]: any; [x: number]: any; readonly [0]: number; [""]: any; }
1414

1515
get [s]() { return 0; },
1616
>s : string

tests/baselines/reference/computedPropertyNames11_ES6.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ var a: any;
99
>a : any
1010

1111
var v = {
12-
>v : { readonly [0]: number; [""]: any; }
13-
>{ get [s]() { return 0; }, set [n](v) { }, get [s + s]() { return 0; }, set [s + n](v) { }, get [+s]() { return 0; }, set [""](v) { }, get [0]() { return 0; }, set [a](v) { }, get [<any>true]() { return 0; }, set [`hello bye`](v) { }, get [`hello ${a} bye`]() { return 0; }} : { readonly [0]: number; [""]: any; }
12+
>v : { [x: string]: any; [x: number]: any; readonly [0]: number; [""]: any; }
13+
>{ get [s]() { return 0; }, set [n](v) { }, get [s + s]() { return 0; }, set [s + n](v) { }, get [+s]() { return 0; }, set [""](v) { }, get [0]() { return 0; }, set [a](v) { }, get [<any>true]() { return 0; }, set [`hello bye`](v) { }, get [`hello ${a} bye`]() { return 0; }} : { [x: string]: any; [x: number]: any; readonly [0]: number; [""]: any; }
1414

1515
get [s]() { return 0; },
1616
>s : string

tests/baselines/reference/computedPropertyNames18_ES5.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ function foo() {
33
>foo : () => void
44

55
var obj = {
6-
>obj : {}
7-
>{ [this.bar]: 0 } : {}
6+
>obj : { [x: number]: number; }
7+
>{ [this.bar]: 0 } : { [x: number]: number; }
88

99
[this.bar]: 0
1010
>this.bar : any

tests/baselines/reference/computedPropertyNames18_ES6.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ function foo() {
33
>foo : () => void
44

55
var obj = {
6-
>obj : {}
7-
>{ [this.bar]: 0 } : {}
6+
>obj : { [x: number]: number; }
7+
>{ [this.bar]: 0 } : { [x: number]: number; }
88

99
[this.bar]: 0
1010
>this.bar : any

tests/baselines/reference/computedPropertyNames1_ES5.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
=== tests/cases/conformance/es6/computedProperties/computedPropertyNames1_ES5.ts ===
22
var v = {
3-
>v : {}
4-
>{ get [0 + 1]() { return 0 }, set [0 + 1](v: string) { } //No error} : {}
3+
>v : { [x: number]: number | string; }
4+
>{ get [0 + 1]() { return 0 }, set [0 + 1](v: string) { } //No error} : { [x: number]: number | string; }
55

66
get [0 + 1]() { return 0 },
77
>0 + 1 : number

tests/baselines/reference/computedPropertyNames1_ES6.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
=== tests/cases/conformance/es6/computedProperties/computedPropertyNames1_ES6.ts ===
22
var v = {
3-
>v : {}
4-
>{ get [0 + 1]() { return 0 }, set [0 + 1](v: string) { } //No error} : {}
3+
>v : { [x: number]: number | string; }
4+
>{ get [0 + 1]() { return 0 }, set [0 + 1](v: string) { } //No error} : { [x: number]: number | string; }
55

66
get [0 + 1]() { return 0 },
77
>0 + 1 : number

tests/baselines/reference/computedPropertyNames20_ES5.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
=== tests/cases/conformance/es6/computedProperties/computedPropertyNames20_ES5.ts ===
22
var obj = {
3-
>obj : {}
4-
>{ [this.bar]: 0} : {}
3+
>obj : { [x: number]: number; }
4+
>{ [this.bar]: 0} : { [x: number]: number; }
55

66
[this.bar]: 0
77
>this.bar : any

tests/baselines/reference/computedPropertyNames20_ES6.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
=== tests/cases/conformance/es6/computedProperties/computedPropertyNames20_ES6.ts ===
22
var obj = {
3-
>obj : {}
4-
>{ [this.bar]: 0} : {}
3+
>obj : { [x: number]: number; }
4+
>{ [this.bar]: 0} : { [x: number]: number; }
55

66
[this.bar]: 0
77
>this.bar : any

tests/baselines/reference/computedPropertyNames22_ES5.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ class C {
66
>bar : () => number
77

88
var obj = {
9-
>obj : {}
10-
>{ [this.bar()]() { } } : {}
9+
>obj : { [x: number]: () => void; }
10+
>{ [this.bar()]() { } } : { [x: number]: () => void; }
1111

1212
[this.bar()]() { }
1313
>this.bar() : number

tests/baselines/reference/computedPropertyNames22_ES6.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ class C {
66
>bar : () => number
77

88
var obj = {
9-
>obj : {}
10-
>{ [this.bar()]() { } } : {}
9+
>obj : { [x: number]: () => void; }
10+
>{ [this.bar()]() { } } : { [x: number]: () => void; }
1111

1212
[this.bar()]() { }
1313
>this.bar() : number

tests/baselines/reference/computedPropertyNames25_ES5.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ class C extends Base {
1717
>foo : () => number
1818

1919
var obj = {
20-
>obj : {}
21-
>{ [super.bar()]() { } } : {}
20+
>obj : { [x: number]: () => void; }
21+
>{ [super.bar()]() { } } : { [x: number]: () => void; }
2222

2323
[super.bar()]() { }
2424
>super.bar() : number

tests/baselines/reference/computedPropertyNames25_ES6.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ class C extends Base {
1717
>foo : () => number
1818

1919
var obj = {
20-
>obj : {}
21-
>{ [super.bar()]() { } } : {}
20+
>obj : { [x: number]: () => void; }
21+
>{ [super.bar()]() { } } : { [x: number]: () => void; }
2222

2323
[super.bar()]() { }
2424
>super.bar() : number

tests/baselines/reference/computedPropertyNames28_ES5.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ class C extends Base {
1212
>super : typeof Base
1313

1414
var obj = {
15-
>obj : {}
16-
>{ [(super(), "prop")]() { } } : {}
15+
>obj : { [x: string]: () => void; }
16+
>{ [(super(), "prop")]() { } } : { [x: string]: () => void; }
1717

1818
[(super(), "prop")]() { }
1919
>(super(), "prop") : string

tests/baselines/reference/computedPropertyNames28_ES6.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ class C extends Base {
1212
>super : typeof Base
1313

1414
var obj = {
15-
>obj : {}
16-
>{ [(super(), "prop")]() { } } : {}
15+
>obj : { [x: string]: () => void; }
16+
>{ [(super(), "prop")]() { } } : { [x: string]: () => void; }
1717

1818
[(super(), "prop")]() { }
1919
>(super(), "prop") : string

tests/baselines/reference/computedPropertyNames29_ES5.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ class C {
99
>() => { var obj = { [this.bar()]() { } // needs capture }; } : () => void
1010

1111
var obj = {
12-
>obj : {}
13-
>{ [this.bar()]() { } // needs capture } : {}
12+
>obj : { [x: number]: () => void; }
13+
>{ [this.bar()]() { } // needs capture } : { [x: number]: () => void; }
1414

1515
[this.bar()]() { } // needs capture
1616
>this.bar() : number

tests/baselines/reference/computedPropertyNames29_ES6.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ class C {
99
>() => { var obj = { [this.bar()]() { } // needs capture }; } : () => void
1010

1111
var obj = {
12-
>obj : {}
13-
>{ [this.bar()]() { } // needs capture } : {}
12+
>obj : { [x: number]: () => void; }
13+
>{ [this.bar()]() { } // needs capture } : { [x: number]: () => void; }
1414

1515
[this.bar()]() { } // needs capture
1616
>this.bar() : number

tests/baselines/reference/computedPropertyNames31_ES5.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ class C extends Base {
2020
>() => { var obj = { [super.bar()]() { } // needs capture }; } : () => void
2121

2222
var obj = {
23-
>obj : {}
24-
>{ [super.bar()]() { } // needs capture } : {}
23+
>obj : { [x: number]: () => void; }
24+
>{ [super.bar()]() { } // needs capture } : { [x: number]: () => void; }
2525

2626
[super.bar()]() { } // needs capture
2727
>super.bar() : number

tests/baselines/reference/computedPropertyNames31_ES6.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ class C extends Base {
2020
>() => { var obj = { [super.bar()]() { } // needs capture }; } : () => void
2121

2222
var obj = {
23-
>obj : {}
24-
>{ [super.bar()]() { } // needs capture } : {}
23+
>obj : { [x: number]: () => void; }
24+
>{ [super.bar()]() { } // needs capture } : { [x: number]: () => void; }
2525

2626
[super.bar()]() { } // needs capture
2727
>super.bar() : number

tests/baselines/reference/computedPropertyNames33_ES5.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ class C<T> {
1212
>bar : () => number
1313

1414
var obj = {
15-
>obj : {}
16-
>{ [foo<T>()]() { } } : {}
15+
>obj : { [x: string]: () => void; }
16+
>{ [foo<T>()]() { } } : { [x: string]: () => void; }
1717

1818
[foo<T>()]() { }
1919
>foo<T>() : string

tests/baselines/reference/computedPropertyNames33_ES6.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ class C<T> {
1212
>bar : () => number
1313

1414
var obj = {
15-
>obj : {}
16-
>{ [foo<T>()]() { } } : {}
15+
>obj : { [x: string]: () => void; }
16+
>{ [foo<T>()]() { } } : { [x: string]: () => void; }
1717

1818
[foo<T>()]() { }
1919
>foo<T>() : string

tests/baselines/reference/computedPropertyNames46_ES5.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
=== tests/cases/conformance/es6/computedProperties/computedPropertyNames46_ES5.ts ===
22
var o = {
3-
>o : {}
4-
>{ ["" || 0]: 0} : {}
3+
>o : { [x: string]: number; }
4+
>{ ["" || 0]: 0} : { [x: string]: number; }
55

66
["" || 0]: 0
77
>"" || 0 : string | number

tests/baselines/reference/computedPropertyNames46_ES6.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
=== tests/cases/conformance/es6/computedProperties/computedPropertyNames46_ES6.ts ===
22
var o = {
3-
>o : {}
4-
>{ ["" || 0]: 0} : {}
3+
>o : { [x: string]: number; }
4+
>{ ["" || 0]: 0} : { [x: string]: number; }
55

66
["" || 0]: 0
77
>"" || 0 : string | number

tests/baselines/reference/computedPropertyNames47_ES5.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ enum E2 { x }
88
>x : E2
99

1010
var o = {
11-
>o : {}
12-
>{ [E1.x || E2.x]: 0} : {}
11+
>o : { [x: number]: number; }
12+
>{ [E1.x || E2.x]: 0} : { [x: number]: number; }
1313

1414
[E1.x || E2.x]: 0
1515
>E1.x || E2.x : E1 | E2

tests/baselines/reference/computedPropertyNames47_ES6.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ enum E2 { x }
88
>x : E2
99

1010
var o = {
11-
>o : {}
12-
>{ [E1.x || E2.x]: 0} : {}
11+
>o : { [x: number]: number; }
12+
>{ [E1.x || E2.x]: 0} : { [x: number]: number; }
1313

1414
[E1.x || E2.x]: 0
1515
>E1.x || E2.x : E1 | E2

tests/baselines/reference/computedPropertyNames48_ES5.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ extractIndexer({
3939
}); // Should return string
4040

4141
extractIndexer({
42-
>extractIndexer({ ["" || 0]: ""}) : any
42+
>extractIndexer({ ["" || 0]: ""}) : string
4343
>extractIndexer : <T>(p: { [n: number]: T; }) => T
44-
>{ ["" || 0]: ""} : { [x: number]: undefined; }
44+
>{ ["" || 0]: ""} : { [x: string]: string; }
4545

4646
["" || 0]: ""
4747
>"" || 0 : string | number

tests/baselines/reference/computedPropertyNames48_ES6.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ extractIndexer({
3939
}); // Should return string
4040

4141
extractIndexer({
42-
>extractIndexer({ ["" || 0]: ""}) : any
42+
>extractIndexer({ ["" || 0]: ""}) : string
4343
>extractIndexer : <T>(p: { [n: number]: T; }) => T
44-
>{ ["" || 0]: ""} : { [x: number]: undefined; }
44+
>{ ["" || 0]: ""} : { [x: string]: string; }
4545

4646
["" || 0]: ""
4747
>"" || 0 : string | number

tests/baselines/reference/computedPropertyNames4_ES5.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ var a: any;
99
>a : any
1010

1111
var v = {
12-
>v : { [0]: number; [""]: number; }
13-
>{ [s]: 0, [n]: n, [s + s]: 1, [s + n]: 2, [+s]: s, [""]: 0, [0]: 0, [a]: 1, [<any>true]: 0, [`hello bye`]: 0, [`hello ${a} bye`]: 0} : { [0]: number; [""]: number; }
12+
>v : { [x: string]: number | string; [x: number]: number | string; [0]: number; [""]: number; }
13+
>{ [s]: 0, [n]: n, [s + s]: 1, [s + n]: 2, [+s]: s, [""]: 0, [0]: 0, [a]: 1, [<any>true]: 0, [`hello bye`]: 0, [`hello ${a} bye`]: 0} : { [x: string]: number | string; [x: number]: number | string; [0]: number; [""]: number; }
1414

1515
[s]: 0,
1616
>s : string

tests/baselines/reference/computedPropertyNames4_ES6.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ var a: any;
99
>a : any
1010

1111
var v = {
12-
>v : { [0]: number; [""]: number; }
13-
>{ [s]: 0, [n]: n, [s + s]: 1, [s + n]: 2, [+s]: s, [""]: 0, [0]: 0, [a]: 1, [<any>true]: 0, [`hello bye`]: 0, [`hello ${a} bye`]: 0} : { [0]: number; [""]: number; }
12+
>v : { [x: string]: number | string; [x: number]: number | string; [0]: number; [""]: number; }
13+
>{ [s]: 0, [n]: n, [s + s]: 1, [s + n]: 2, [+s]: s, [""]: 0, [0]: 0, [a]: 1, [<any>true]: 0, [`hello bye`]: 0, [`hello ${a} bye`]: 0} : { [x: string]: number | string; [x: number]: number | string; [0]: number; [""]: number; }
1414

1515
[s]: 0,
1616
>s : string

tests/baselines/reference/computedPropertyNames7_ES5.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ enum E {
66
>member : E
77
}
88
var v = {
9-
>v : {}
10-
>{ [E.member]: 0} : {}
9+
>v : { [x: number]: number; }
10+
>{ [E.member]: 0} : { [x: number]: number; }
1111

1212
[E.member]: 0
1313
>E.member : E

0 commit comments

Comments
 (0)