在Typescript中混合使用接口

poc*_*sar 9 interface typescript

我有一个包含80多个方法的类,每个方法都接受一个包含一些已定义接口的对象.

class Stuff {
   /* many more */
   getAccount(req: IAccount, callback: ICallback) {
      return this._call('getAccount', req, callback);
   }

   getIds(req: IIDs, callback: ICallback) {
      return this._call('getIds', req, callback);
   }
   /* many more */
}
Run Code Online (Sandbox Code Playgroud)

非常'无聊'的东西,因为它只是映射到底层_call方法,并使每种方法的类型安全.

但有时这些reqparam对象是由2个或更多接口组成的,而不是每次创建另一个接口都有"尴尬",如下所示:

export interface ILoled extends IAccount {
   loled: boolean;
}

export interface IRofloled extends ILoled {
   rofled: boolean;
}

class Stuff {
  getLols(req: ILoled){
  }

  getRofls(req: IRofloled){
  }
}
Run Code Online (Sandbox Code Playgroud)

有什么方法我可以把它作为方法参数列表中的接口的"内联"混合?喜欢(显然不起作用):

class Stuff {
  getMoreStuff(req: <{} extends IAccount, ITime>) {
  }
}
Run Code Online (Sandbox Code Playgroud)

Jas*_*onS 13

是的,你可以使用Typescript 1.6.称为交叉点类型,使用&运算符组合类型.

function extend<T, U>(first: T, second: U): T & U {
  let result = <T & U> {};
  for (let id in first) {
    result[id] = first[id];
  }

  for (let id in second) {
    if (!result.hasOwnProperty(id)) {
      result[id] = second[id];
    }
  }
  return result;
}

var x = extend({ a: "hello" }, { b: 42 });
x.a; // works
x.b; // works 
Run Code Online (Sandbox Code Playgroud)