扩展TypeScript类时的方法链接

时间:2015-03-27 20:34:06

标签: typescript definition extends

在扩展类时是否有一种简单的方法可以更改方法的返回类型,而无需在每个新定义中明确设置它?我想简化我的定义......

declare class Foo {
    add(): Foo;
}

declare class Bar extends Foo {
    add(): Bar;
    remove(): Bar;
}

declare class Baz extends Bar {
    add(): Baz;
    remove(): Baz;
    destroy(): Baz;
}

// Usage...
var foo = new Foo().add();    
var bar = new Bar().add().remove();    
var baz = new Baz().add().remove().destroy();

2 个答案:

答案 0 :(得分:1)

类型系统尚未支持此功能。 See issue #285 in GitHub for tracking

答案 1 :(得分:1)

我能够通过修改大卫的例子来实现这一目标。它并不理想,但它确实有效。

declare class IFoo<T> {
    add(): T;
}

declare class IBar<T> extends IFoo<T> {
    remove(): T;
}

declare class IBaz<T> extends IBar<T> {
    destroy(): T;
}

declare class Foo extends IFoo<Foo> { }
declare class Bar extends IBar<Bar> { }
declare class Baz extends IBaz<Baz> { }

// Okay
var foo = new Foo().add();
var bar = new Bar().add().remove();
var baz = new Baz().add().remove().destroy();

Working example