扩展 TypeScript 时的方法链接 类

Method chaining when extending TypeScript classes

有没有一种简单的方法可以在扩展 class 时更改方法的 return 类型,而不必在每个新定义中显式设置它?我想简化我的定义,看起来像这样...

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();

类型系统尚不支持。 See issue #285 in GitHub for tracking.

我可以通过稍微修改 David 的示例来实现这一点。这并不理想,但它确实有效。

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