扩展 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();
有没有一种简单的方法可以在扩展 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();