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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
=== tests/cases/compiler/genericSpecializations3.ts ===
interface IFoo<T> {
foo(x: T): T;
>foo : (x: T) => T
>x : T
}
var iFoo: IFoo<number>;
>iFoo : IFoo<number>
iFoo.foo(1);
>iFoo.foo(1) : number
>iFoo.foo : (x: number) => number
>iFoo : IFoo<number>
>foo : (x: number) => number
>1 : 1
class IntFooBad implements IFoo<number> { // error
>IntFooBad : IntFooBad
foo(x: string): string { return null; }
>foo : (x: string) => string
>x : string
>null : null
}
var intFooBad: IntFooBad;
>intFooBad : IntFooBad
class IntFoo implements IFoo<number> {
>IntFoo : IntFoo
foo(x: number): number { return null; }
>foo : (x: number) => number
>x : number
>null : null
}
var intFoo: IntFoo;
>intFoo : IntFoo
class StringFoo2 implements IFoo<string> {
>StringFoo2 : StringFoo2
foo(x: string): string { return null; }
>foo : (x: string) => string
>x : string
>null : null
}
var stringFoo2: StringFoo2;
>stringFoo2 : StringFoo2
stringFoo2.foo("hm");
>stringFoo2.foo("hm") : string
>stringFoo2.foo : (x: string) => string
>stringFoo2 : StringFoo2
>foo : (x: string) => string
>"hm" : "hm"
intFoo = stringFoo2; // error
>intFoo = stringFoo2 : StringFoo2
>intFoo : IntFoo
>stringFoo2 : StringFoo2
stringFoo2 = intFoo; // error
>stringFoo2 = intFoo : IntFoo
>stringFoo2 : StringFoo2
>intFoo : IntFoo
class StringFoo3 implements IFoo<string> { // error
>StringFoo3 : StringFoo3
foo<T>(x: T): T { return null; }
>foo : <T>(x: T) => T
>x : T
>null : null
}
var stringFoo3: StringFoo3;
>stringFoo3 : StringFoo3
|