我正在为使用方法链接的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();
}
这些功能重用了一些基本接口并根据需要混合使用。我想知道是否有更好的打字方式?或者如果仿制药是要走的路?
答案 0 :(得分:0)
Stephen Chungs评论:
我不认为仿制药在这里是相关的,除非你的不同 &#34;功能&#34;实际上是不同类型的相同实现 你的方式是&#34;官方&#34;模拟mixin支持的方法 TypeScript(直到它具有真正的mixin语法),所以我认为 看起来很好。
是答案,所以我正在回答&#34;在这里,为了使问题不再显示为未答复。