在扩展类时是否有一种简单的方法可以更改方法的返回类型,而无需在每个新定义中明确设置它?我想简化我的定义......
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();
答案 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();