TypeScript/tests/baselines/reference/subtypingWithNumericIndexer5.errors.txt
Anders Hejlsberg 0e905be42b
Index signatures for symbols and template literal strings (#44512)
* 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
2021-06-21 11:25:42 -07:00

83 lines
4.4 KiB
Plaintext

tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithNumericIndexer5.ts(11,7): error TS2420: Class 'B' incorrectly implements interface 'A'.
'string' and 'number' index signatures are incompatible.
Type 'Base' is not assignable to type 'Derived'.
Property 'bar' is missing in type 'Base' but required in type 'Derived'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithNumericIndexer5.ts(32,11): error TS2420: Class 'B3<T>' incorrectly implements interface 'A<T>'.
'string' and 'number' index signatures are incompatible.
Type 'Base' is not assignable to type 'T'.
'T' could be instantiated with an arbitrary type which could be unrelated to 'Base'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithNumericIndexer5.ts(36,11): error TS2420: Class 'B4<T>' incorrectly implements interface 'A<T>'.
'string' and 'number' index signatures are incompatible.
Type 'Derived' is not assignable to type 'T'.
'Derived' is assignable to the constraint of type 'T', but 'T' could be instantiated with a different subtype of constraint 'Derived'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithNumericIndexer5.ts(40,11): error TS2420: Class 'B5<T>' incorrectly implements interface 'A<T>'.
'string' and 'number' index signatures are incompatible.
Type 'Derived2' is not assignable to type 'T'.
'Derived2' is assignable to the constraint of type 'T', but 'T' could be instantiated with a different subtype of constraint 'Derived2'.
==== tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithNumericIndexer5.ts (4 errors) ====
// Derived type indexer must be subtype of base type indexer
interface Base { foo: string; }
interface Derived extends Base { bar: string; }
interface Derived2 extends Derived { baz: string; }
interface A {
[x: number]: Derived;
}
class B implements A {
~
!!! error TS2420: Class 'B' incorrectly implements interface 'A'.
!!! error TS2420: 'string' and 'number' index signatures are incompatible.
!!! error TS2420: Type 'Base' is not assignable to type 'Derived'.
!!! error TS2420: Property 'bar' is missing in type 'Base' but required in type 'Derived'.
!!! related TS2728 tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithNumericIndexer5.ts:4:34: 'bar' is declared here.
[x: string]: Base; // error
}
class B2 implements A {
[x: string]: Derived2; // ok
}
module Generics {
interface A<T extends Base> {
[x: number]: T;
}
class B implements A<Base> {
[x: string]: Derived; // ok
}
class B2 implements A<Derived> {
[x: string]: Derived2; // ok
}
class B3<T extends Derived> implements A<T> {
~~
!!! error TS2420: Class 'B3<T>' incorrectly implements interface 'A<T>'.
!!! error TS2420: 'string' and 'number' index signatures are incompatible.
!!! error TS2420: Type 'Base' is not assignable to type 'T'.
!!! error TS2420: 'T' could be instantiated with an arbitrary type which could be unrelated to 'Base'.
[x: string]: Base; // error
}
class B4<T extends Derived> implements A<T> {
~~
!!! error TS2420: Class 'B4<T>' incorrectly implements interface 'A<T>'.
!!! error TS2420: 'string' and 'number' index signatures are incompatible.
!!! error TS2420: Type 'Derived' is not assignable to type 'T'.
!!! error TS2420: 'Derived' is assignable to the constraint of type 'T', but 'T' could be instantiated with a different subtype of constraint 'Derived'.
[x: string]: Derived; // error
}
class B5<T extends Derived2> implements A<T> {
~~
!!! error TS2420: Class 'B5<T>' incorrectly implements interface 'A<T>'.
!!! error TS2420: 'string' and 'number' index signatures are incompatible.
!!! error TS2420: Type 'Derived2' is not assignable to type 'T'.
!!! error TS2420: 'Derived2' is assignable to the constraint of type 'T', but 'T' could be instantiated with a different subtype of constraint 'Derived2'.
[x: string]: Derived2; // error
}
}