1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
tests/cases/compiler/genericImplements.ts(9,5): error TS2416: Property 'f' in type 'X' is not assignable to the same property in base type 'I'.
Type '<T extends B>() => T' is not assignable to type '<T extends A>() => T'.
Type 'B' is not assignable to type 'T'.
'T' could be instantiated with an arbitrary type which could be unrelated to 'B'.
==== tests/cases/compiler/genericImplements.ts (1 errors) ====
class A { a; };
class B { b; };
interface I {
f<T extends A>(): T;
} // { f: () => { a; } }
// OK
class X implements I {
f<T extends B>(): T { return undefined; }
~
!!! error TS2416: Property 'f' in type 'X' is not assignable to the same property in base type 'I'.
!!! error TS2416: Type '<T extends B>() => T' is not assignable to type '<T extends A>() => T'.
!!! error TS2416: Type 'B' is not assignable to type 'T'.
!!! error TS2416: 'T' could be instantiated with an arbitrary type which could be unrelated to 'B'.
} // { f: () => { b; } }
// OK
class Y implements I {
f<T extends A>(): T { return undefined; }
} // { f: () => { a; } }
// OK
class Z implements I {
f<T>(): T { return undefined; }
} // { f: <T>() => T }
|