使用流畅/链接API的JS库的Typescript定义文件(.d.ts)

时间:2014-02-11 21:19:02

标签: typescript

我正在为使用方法链接的JS lib编写定义文件。但是以比我之前看到的更复杂的方式,因为它也使用/重用抽象基类。所以我采用了这种方法:

// the test.d.ts
    declare module someJSChainingLib {

  export interface IbaseA <T>{
    function1: () => T;
  }
  export interface IbaseB<T> {
    function2: () => T;
  }

  export interface IbaseC<T> {
    function3: () => T;
  }

  export interface IbaseD<T> {
    function4: () => T;
  }

  export interface ICombinator1 extends IbaseA<ICombinator1>, IbaseB<ICombinator1>, IbaseC<ICombinator1> {
  // possibly add more stuff here 
  }

  export interface ICombinator2 extends IbaseA<ICombinator2>, IbaseB<ICombinator2>, IbaseD<ICombinator2> {
  // possibly add more stuff here
  }


  export interface IFeature1 extends ICombinator1 {
  // this has the base interfaces A,B,C
  // possibly add more stuff here
  }


  export interface IFeature2 extends ICombinator2 {
  // this has the base interfaces A,B,D     
  // possibly add more stuff here
  }

}

在消费方面它看起来像这样:

///<reference path="test.d.ts" />

function callit() {

  var test1: someJSChainingLib.IFeature1;
  test1.function1().function2().function3();  


  var test2: someJSChainingLib.IFeature2;
  test2.function1().function2().function4();
}

这些功能重用了一些基本接口并根据需要混合使用。我想知道是否有更好的打字方式?或者如果仿制药是要走的路?

1 个答案:

答案 0 :(得分:0)

Stephen Chungs评论:

  

我不认为仿制药在这里是相关的,除非你的不同   &#34;功能&#34;实际上是不同类型的相同实现   你的方式是&#34;官方&#34;模拟mixin支持的方法   TypeScript(直到它具有真正的mixin语法),所以我认为   看起来很好。

是答案,所以我正在回答&#34;在这里,为了使问题不再显示为未答复。