【问题标题】:Method chaining when extending TypeScript classes扩展 TypeScript 类时的方法链接
【发布时间】:2015-03-27 20:34:06
【问题描述】:

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

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

【问题讨论】:

  • 这并不理想,但我就是这样做的:stackoverflow.com/a/23024723/188246 -- 也许有人知道更好的方法?
  • 我可以让它适用于 Bar 类,但不适用于 Baz 类。
  • 哦,是的,它不适用于超过一层继承:(

标签: typescript definition extends


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我可以通过稍微修改 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

    【讨论】:

      猜你喜欢
      • 2021-10-10
      • 2018-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-24
      • 1970-01-01
      • 2018-09-23
      相关资源
      最近更新 更多