0e905be42b
* Switch index signature storage to 'indexInfos: IndexInfo[]' property * Accept new baselines * Remove another usage of IndexKind enum * Update getIndexedAccessType and resolveMappedTypeMembers * Accept new baselines * Update grammar checking for index signatures * Accept new baselines * Consider all index signatures in mapped types and union types * Accept new baselines * Update getIndexType * Accept new baselines * Intersect multiple applicable index signatures * Use getApplicableIndexInfo instead of hardwired string/number handling * Update index signature relationship checking * Report type for which index signature is missing * Report type for which index signature is missing * Accept new baselines * Make 'number' index signatures consistently apply to numeric strings * Accept new baselines * Update fourslash test * Revise index constraint checking * Accept new baselines * Update error messages * Accept new baselines * Update type inference from index signatures * Update isKnownProperty * Update contextual typing based on index signatures * Accept new baselines * Support union types in index signature declarations * Accept new baselines * Check duplicate index signatures / remove redundant template literals from unions with string * Accept new baselines * Include key type in diagnostic / check symbol-named properties * Accept new baselines * Minor fix * Add tests * Accept new baselines * Add optimized findApplicableIndexInfoForName * Accept new baselines * Another place we don't need to obtain literal type for property name * Accept new baselines * Don't create literal types that are going to be discarded * Individual maps for string, number, bigint, and enum literal types * Remove ineffective optimizations * Accept new baselines * Permit intersections as key types in index signatures * Index expression in element access is template literal context * Add tests * Accept new baselines * Symbol index signatures from object literals with computed symbol properties * Accept new baselines * Add more tests * Accept new baselines * Implement Go To Definition for all applicable index signatures * Add fourslash test * Accept new API baselines
304 lines
18 KiB
Plaintext
304 lines
18 KiB
Plaintext
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithRecursiveConstraints.ts(68,9): error TS2411: Property 'foo' of type 'U' is not assignable to 'string' index type 'T'.
|
|
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithRecursiveConstraints.ts(68,9): error TS2416: Property 'foo' in type 'D2<T, U, V>' is not assignable to the same property in base type 'Base<T>'.
|
|
Type 'U' is not assignable to type 'T'.
|
|
'T' could be instantiated with an arbitrary type which could be unrelated to 'U'.
|
|
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithRecursiveConstraints.ts(73,9): error TS2411: Property 'foo' of type 'V' is not assignable to 'string' index type 'T'.
|
|
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithRecursiveConstraints.ts(73,9): error TS2416: Property 'foo' in type 'D3<T, U, V>' is not assignable to the same property in base type 'Base<T>'.
|
|
Type 'V' is not assignable to type 'T'.
|
|
'T' could be instantiated with an arbitrary type which could be unrelated to 'V'.
|
|
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithRecursiveConstraints.ts(78,9): error TS2411: Property 'foo' of type 'T' is not assignable to 'string' index type 'U'.
|
|
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithRecursiveConstraints.ts(78,9): error TS2416: Property 'foo' in type 'D4<T, U, V>' is not assignable to the same property in base type 'Base<U>'.
|
|
Type 'T' is not assignable to type 'U'.
|
|
'U' could be instantiated with an arbitrary type which could be unrelated to 'T'.
|
|
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithRecursiveConstraints.ts(88,9): error TS2411: Property 'foo' of type 'V' is not assignable to 'string' index type 'U'.
|
|
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithRecursiveConstraints.ts(88,9): error TS2416: Property 'foo' in type 'D6<T, U, V>' is not assignable to the same property in base type 'Base<U>'.
|
|
Type 'V' is not assignable to type 'U'.
|
|
'U' could be instantiated with an arbitrary type which could be unrelated to 'V'.
|
|
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithRecursiveConstraints.ts(93,9): error TS2411: Property 'foo' of type 'T' is not assignable to 'string' index type 'V'.
|
|
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithRecursiveConstraints.ts(93,9): error TS2416: Property 'foo' in type 'D7<T, U, V>' is not assignable to the same property in base type 'Base<V>'.
|
|
Type 'T' is not assignable to type 'V'.
|
|
'V' could be instantiated with an arbitrary type which could be unrelated to 'T'.
|
|
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithRecursiveConstraints.ts(98,9): error TS2411: Property 'foo' of type 'U' is not assignable to 'string' index type 'V'.
|
|
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithRecursiveConstraints.ts(98,9): error TS2416: Property 'foo' in type 'D8<T, U, V>' is not assignable to the same property in base type 'Base<V>'.
|
|
Type 'U' is not assignable to type 'V'.
|
|
'V' could be instantiated with an arbitrary type which could be unrelated to 'U'.
|
|
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithRecursiveConstraints.ts(115,9): error TS2416: Property 'foo' in type 'D1<T, U, V>' is not assignable to the same property in base type 'Base2<T>'.
|
|
Type 'T' is not assignable to type 'Foo<T>'.
|
|
Type 'Foo<U>' is not assignable to type 'Foo<T>'.
|
|
Type 'U' is not assignable to type 'T'.
|
|
'T' could be instantiated with an arbitrary type which could be unrelated to 'U'.
|
|
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithRecursiveConstraints.ts(120,9): error TS2411: Property 'foo' of type 'U' is not assignable to 'string' index type 'T'.
|
|
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithRecursiveConstraints.ts(125,9): error TS2411: Property 'foo' of type 'V' is not assignable to 'string' index type 'T'.
|
|
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithRecursiveConstraints.ts(125,9): error TS2416: Property 'foo' in type 'D3<T, U, V>' is not assignable to the same property in base type 'Base2<T>'.
|
|
Type 'V' is not assignable to type 'Foo<T>'.
|
|
Type 'Foo<V>' is not assignable to type 'Foo<T>'.
|
|
Type 'V' is not assignable to type 'T'.
|
|
'T' could be instantiated with an arbitrary type which could be unrelated to 'V'.
|
|
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithRecursiveConstraints.ts(130,9): error TS2411: Property 'foo' of type 'T' is not assignable to 'string' index type 'U'.
|
|
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithRecursiveConstraints.ts(135,9): error TS2416: Property 'foo' in type 'D5<T, U, V>' is not assignable to the same property in base type 'Base2<U>'.
|
|
Type 'U' is not assignable to type 'Foo<U>'.
|
|
Type 'Foo<T>' is not assignable to type 'Foo<U>'.
|
|
Type 'T' is not assignable to type 'U'.
|
|
'U' could be instantiated with an arbitrary type which could be unrelated to 'T'.
|
|
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithRecursiveConstraints.ts(140,9): error TS2411: Property 'foo' of type 'V' is not assignable to 'string' index type 'U'.
|
|
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithRecursiveConstraints.ts(140,9): error TS2416: Property 'foo' in type 'D6<T, U, V>' is not assignable to the same property in base type 'Base2<U>'.
|
|
Type 'V' is not assignable to type 'Foo<U>'.
|
|
Type 'Foo<V>' is not assignable to type 'Foo<U>'.
|
|
Type 'V' is not assignable to type 'U'.
|
|
'U' could be instantiated with an arbitrary type which could be unrelated to 'V'.
|
|
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithRecursiveConstraints.ts(145,9): error TS2411: Property 'foo' of type 'T' is not assignable to 'string' index type 'V'.
|
|
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithRecursiveConstraints.ts(145,9): error TS2416: Property 'foo' in type 'D7<T, U, V>' is not assignable to the same property in base type 'Base2<V>'.
|
|
Type 'T' is not assignable to type 'Foo<V>'.
|
|
Type 'Foo<U>' is not assignable to type 'Foo<V>'.
|
|
Type 'U' is not assignable to type 'V'.
|
|
'V' could be instantiated with an arbitrary type which could be unrelated to 'U'.
|
|
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithRecursiveConstraints.ts(150,9): error TS2411: Property 'foo' of type 'U' is not assignable to 'string' index type 'V'.
|
|
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithRecursiveConstraints.ts(150,9): error TS2416: Property 'foo' in type 'D8<T, U, V>' is not assignable to the same property in base type 'Base2<V>'.
|
|
Type 'U' is not assignable to type 'Foo<V>'.
|
|
Type 'Foo<T>' is not assignable to type 'Foo<V>'.
|
|
Type 'T' is not assignable to type 'V'.
|
|
'V' could be instantiated with an arbitrary type which could be unrelated to 'T'.
|
|
|
|
|
|
==== tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithRecursiveConstraints.ts (24 errors) ====
|
|
// checking whether other types are subtypes of type parameters with constraints
|
|
|
|
class Foo<T> { foo: T; }
|
|
function f<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>>(t: T, u: U, v: V) {
|
|
// ok
|
|
var r1 = true ? t : u;
|
|
var r1 = true ? u : t;
|
|
|
|
// ok
|
|
var r2 = true ? t : v;
|
|
var r2 = true ? v : t;
|
|
|
|
// ok
|
|
var r3 = true ? v : u;
|
|
var r3 = true ? u : v;
|
|
|
|
// ok
|
|
var r4 = true ? t : new Foo<T>();
|
|
var r4 = true ? new Foo<T>() : t;
|
|
|
|
// ok
|
|
var r5 = true ? u : new Foo<T>();
|
|
var r5 = true ? new Foo<T>() : u;
|
|
|
|
// ok
|
|
var r6 = true ? v : new Foo<T>();
|
|
var r6 = true ? new Foo<T>() : v;
|
|
|
|
|
|
// ok
|
|
var r7 = true ? t : new Foo<U>();
|
|
var r7 = true ? new Foo<U>() : t;
|
|
|
|
// ok
|
|
var r8 = true ? u : new Foo<U>();
|
|
var r8 = true ? new Foo<U>() : u;
|
|
|
|
// ok
|
|
var r9 = true ? v : new Foo<U>();
|
|
var r9 = true ? new Foo<U>() : v;
|
|
|
|
|
|
// ok
|
|
var r10 = true ? t : new Foo<V>();
|
|
var r10 = true ? new Foo<V>() : t;
|
|
|
|
// ok
|
|
var r11 = true ? u : new Foo<V>();
|
|
var r11 = true ? new Foo<V>() : u;
|
|
|
|
// ok
|
|
var r12 = true ? v : new Foo<V>();
|
|
var r12 = true ? new Foo<V>() : v;
|
|
}
|
|
|
|
module M1 {
|
|
class Base<T> {
|
|
foo: T;
|
|
}
|
|
|
|
class D1<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base<T> {
|
|
[x: string]: T;
|
|
foo: T
|
|
}
|
|
|
|
class D2<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base<T> {
|
|
[x: string]: T;
|
|
foo: U
|
|
~~~
|
|
!!! error TS2411: Property 'foo' of type 'U' is not assignable to 'string' index type 'T'.
|
|
~~~
|
|
!!! error TS2416: Property 'foo' in type 'D2<T, U, V>' is not assignable to the same property in base type 'Base<T>'.
|
|
!!! error TS2416: Type 'U' is not assignable to type 'T'.
|
|
!!! error TS2416: 'T' could be instantiated with an arbitrary type which could be unrelated to 'U'.
|
|
}
|
|
|
|
class D3<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base<T> {
|
|
[x: string]: T;
|
|
foo: V
|
|
~~~
|
|
!!! error TS2411: Property 'foo' of type 'V' is not assignable to 'string' index type 'T'.
|
|
~~~
|
|
!!! error TS2416: Property 'foo' in type 'D3<T, U, V>' is not assignable to the same property in base type 'Base<T>'.
|
|
!!! error TS2416: Type 'V' is not assignable to type 'T'.
|
|
!!! error TS2416: 'T' could be instantiated with an arbitrary type which could be unrelated to 'V'.
|
|
}
|
|
|
|
class D4<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base<U> {
|
|
[x: string]: U;
|
|
foo: T
|
|
~~~
|
|
!!! error TS2411: Property 'foo' of type 'T' is not assignable to 'string' index type 'U'.
|
|
~~~
|
|
!!! error TS2416: Property 'foo' in type 'D4<T, U, V>' is not assignable to the same property in base type 'Base<U>'.
|
|
!!! error TS2416: Type 'T' is not assignable to type 'U'.
|
|
!!! error TS2416: 'U' could be instantiated with an arbitrary type which could be unrelated to 'T'.
|
|
}
|
|
|
|
class D5<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base<U> {
|
|
[x: string]: U;
|
|
foo: U
|
|
}
|
|
|
|
class D6<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base<U> {
|
|
[x: string]: U;
|
|
foo: V
|
|
~~~
|
|
!!! error TS2411: Property 'foo' of type 'V' is not assignable to 'string' index type 'U'.
|
|
~~~
|
|
!!! error TS2416: Property 'foo' in type 'D6<T, U, V>' is not assignable to the same property in base type 'Base<U>'.
|
|
!!! error TS2416: Type 'V' is not assignable to type 'U'.
|
|
!!! error TS2416: 'U' could be instantiated with an arbitrary type which could be unrelated to 'V'.
|
|
}
|
|
|
|
class D7<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base<V> {
|
|
[x: string]: V;
|
|
foo: T
|
|
~~~
|
|
!!! error TS2411: Property 'foo' of type 'T' is not assignable to 'string' index type 'V'.
|
|
~~~
|
|
!!! error TS2416: Property 'foo' in type 'D7<T, U, V>' is not assignable to the same property in base type 'Base<V>'.
|
|
!!! error TS2416: Type 'T' is not assignable to type 'V'.
|
|
!!! error TS2416: 'V' could be instantiated with an arbitrary type which could be unrelated to 'T'.
|
|
}
|
|
|
|
class D8<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base<V> {
|
|
[x: string]: V;
|
|
foo: U
|
|
~~~
|
|
!!! error TS2411: Property 'foo' of type 'U' is not assignable to 'string' index type 'V'.
|
|
~~~
|
|
!!! error TS2416: Property 'foo' in type 'D8<T, U, V>' is not assignable to the same property in base type 'Base<V>'.
|
|
!!! error TS2416: Type 'U' is not assignable to type 'V'.
|
|
!!! error TS2416: 'V' could be instantiated with an arbitrary type which could be unrelated to 'U'.
|
|
}
|
|
|
|
class D9<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base<V> {
|
|
[x: string]: V;
|
|
foo: V
|
|
}
|
|
}
|
|
|
|
|
|
module M2 {
|
|
class Base2<T> {
|
|
foo: Foo<T>;
|
|
}
|
|
|
|
class D1<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base2<T> {
|
|
[x: string]: T;
|
|
foo: T
|
|
~~~
|
|
!!! error TS2416: Property 'foo' in type 'D1<T, U, V>' is not assignable to the same property in base type 'Base2<T>'.
|
|
!!! error TS2416: Type 'T' is not assignable to type 'Foo<T>'.
|
|
!!! error TS2416: Type 'Foo<U>' is not assignable to type 'Foo<T>'.
|
|
!!! error TS2416: Type 'U' is not assignable to type 'T'.
|
|
!!! error TS2416: 'T' could be instantiated with an arbitrary type which could be unrelated to 'U'.
|
|
}
|
|
|
|
class D2<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base2<T> {
|
|
[x: string]: T;
|
|
foo: U
|
|
~~~
|
|
!!! error TS2411: Property 'foo' of type 'U' is not assignable to 'string' index type 'T'.
|
|
}
|
|
|
|
class D3<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base2<T> {
|
|
[x: string]: T;
|
|
foo: V
|
|
~~~
|
|
!!! error TS2411: Property 'foo' of type 'V' is not assignable to 'string' index type 'T'.
|
|
~~~
|
|
!!! error TS2416: Property 'foo' in type 'D3<T, U, V>' is not assignable to the same property in base type 'Base2<T>'.
|
|
!!! error TS2416: Type 'V' is not assignable to type 'Foo<T>'.
|
|
!!! error TS2416: Type 'Foo<V>' is not assignable to type 'Foo<T>'.
|
|
!!! error TS2416: Type 'V' is not assignable to type 'T'.
|
|
!!! error TS2416: 'T' could be instantiated with an arbitrary type which could be unrelated to 'V'.
|
|
}
|
|
|
|
class D4<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base2<U> {
|
|
[x: string]: U;
|
|
foo: T
|
|
~~~
|
|
!!! error TS2411: Property 'foo' of type 'T' is not assignable to 'string' index type 'U'.
|
|
}
|
|
|
|
class D5<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base2<U> {
|
|
[x: string]: U;
|
|
foo: U
|
|
~~~
|
|
!!! error TS2416: Property 'foo' in type 'D5<T, U, V>' is not assignable to the same property in base type 'Base2<U>'.
|
|
!!! error TS2416: Type 'U' is not assignable to type 'Foo<U>'.
|
|
!!! error TS2416: Type 'Foo<T>' is not assignable to type 'Foo<U>'.
|
|
!!! error TS2416: Type 'T' is not assignable to type 'U'.
|
|
!!! error TS2416: 'U' could be instantiated with an arbitrary type which could be unrelated to 'T'.
|
|
}
|
|
|
|
class D6<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base2<U> {
|
|
[x: string]: U;
|
|
foo: V
|
|
~~~
|
|
!!! error TS2411: Property 'foo' of type 'V' is not assignable to 'string' index type 'U'.
|
|
~~~
|
|
!!! error TS2416: Property 'foo' in type 'D6<T, U, V>' is not assignable to the same property in base type 'Base2<U>'.
|
|
!!! error TS2416: Type 'V' is not assignable to type 'Foo<U>'.
|
|
!!! error TS2416: Type 'Foo<V>' is not assignable to type 'Foo<U>'.
|
|
!!! error TS2416: Type 'V' is not assignable to type 'U'.
|
|
!!! error TS2416: 'U' could be instantiated with an arbitrary type which could be unrelated to 'V'.
|
|
}
|
|
|
|
class D7<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base2<V> {
|
|
[x: string]: V;
|
|
foo: T
|
|
~~~
|
|
!!! error TS2411: Property 'foo' of type 'T' is not assignable to 'string' index type 'V'.
|
|
~~~
|
|
!!! error TS2416: Property 'foo' in type 'D7<T, U, V>' is not assignable to the same property in base type 'Base2<V>'.
|
|
!!! error TS2416: Type 'T' is not assignable to type 'Foo<V>'.
|
|
!!! error TS2416: Type 'Foo<U>' is not assignable to type 'Foo<V>'.
|
|
!!! error TS2416: Type 'U' is not assignable to type 'V'.
|
|
!!! error TS2416: 'V' could be instantiated with an arbitrary type which could be unrelated to 'U'.
|
|
}
|
|
|
|
class D8<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base2<V> {
|
|
[x: string]: V;
|
|
foo: U
|
|
~~~
|
|
!!! error TS2411: Property 'foo' of type 'U' is not assignable to 'string' index type 'V'.
|
|
~~~
|
|
!!! error TS2416: Property 'foo' in type 'D8<T, U, V>' is not assignable to the same property in base type 'Base2<V>'.
|
|
!!! error TS2416: Type 'U' is not assignable to type 'Foo<V>'.
|
|
!!! error TS2416: Type 'Foo<T>' is not assignable to type 'Foo<V>'.
|
|
!!! error TS2416: Type 'T' is not assignable to type 'V'.
|
|
!!! error TS2416: 'V' could be instantiated with an arbitrary type which could be unrelated to 'T'.
|
|
}
|
|
|
|
class D9<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base2<V> {
|
|
[x: string]: V;
|
|
foo: V
|
|
}
|
|
} |