Создание mixin интерфейсов в 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 */
}
довольно "скучные" вещи, так как это просто отображение в подложку _call
метод и сделать его безопасным для каждого из методов.
но иногда эти req
объекты param состоят из 2 или более интерфейсов, и вместо создания другого интерфейса для каждого раза есть "неудобный", например:
export interface ILoled extends IAccount {
loled: boolean;
}
export interface IRofloled extends ILoled {
rofled: boolean;
}
class Stuff {
getLols(req: ILoled){
}
getRofls(req: IRofloled){
}
}
is есть ли способ, которым я могу просто поместить его как "встроенный" mixin интерфейсов внутри списка параметров метода? Как (которые, очевидно, не работают):
class Stuff {
getMoreStuff(req: <{} extends IAccount, ITime>) {
}
}
2 ответов
Да, вы можете, по состоянию на 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
есть ли способ, которым я могу просто поместить его как "встроенный" mixin интерфейсов внутри списка параметров метода
нет. Нельзя расширения встроенный интерфейс