有什么区别:
interface MyType {
f<T>(other: T): this & T;
}
和
interface MyType {
f<T>(other: T): MyType & T;
}
答案 0 :(得分:2)
this
类型取决于实现类,因此给定第一个定义,以下将进行类型检查:
class Foo implements MyType {
f<T>(other: T): T & this { ... }
g(): string { return "only in foo"; }
}
var foo: Foo
var ff = foo.f("dsklf");
var s: string = ff.g();
因为ff
的类型为Foo & string
,因此是Foo
的子类型。
鉴于MyType
的第二个定义,ff.g()
不会进行类型检查,因为g
上未定义MyType & string
。