Я пишу некоторые типы структур существующего API.
export interface Filter {
value: number;
operator: string;
};
export interface MySetup {
foo: Filter;
bar: {
value: number;
operator: string;
additionWithName: string;
};
alice: {
value: number;
operator: string;
additionWithOtherName: string;
};
}
Я могу написать это также как:
export interface Filter {
value: number;
operator: string;
};
export interface FilterBar extends Filter {
additionWithName: string;
};
export interface FilterAlice extends Filter {
additionWithOtherName: string;
};
export interface MySetup {
foo: Filter;
bar: FilterBar;
alice: FilterAlice;
}
Можно ли расширить некоторые интерфейсы анонимным способом? Я хочу написать что-то вроде:
export interface Filter {
value: number;
operator: string;
};
export interface MySetup {
foo: Filter;
bar: Filter extends {additionWithOtherName: string;};
alice: Filter extends {additionWithName: string;};
}






Вы не можете делать встроенные расширения, но тип перекрестка обеспечит хорошее приближение к этому, т.е. тип, который должен иметь свойства интерфейса и некоторые другие дополнительные свойства:
export interface Filter {
value: number;
operator: string;
};
export interface MySetup {
foo: Filter;
bar: Filter & {additionWithOtherName: string;};
alice: Filter & {additionWithName: string;};
}