TypeScript - 类型交集&这个关键字

时间:2016-06-22 13:01:26

标签: types typescript

有什么区别:

interface MyType {
    f<T>(other: T): this & T;
}

interface MyType {
    f<T>(other: T): MyType & T;
}

1 个答案:

答案 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