#javascript #typescript
#javascript #typescript
Вопрос:
итак, у меня есть
export interface Interface1 {
relevantProp1: RelevantProp1;
relevantProp2?: RelevantProp2;
irrelevantProp1?: SomeRandomType;
irrelevantProp2?: SomeRandomType;
}
export interface Interface2 {
relevantProp3: RelevantProp3;
irrelevantProp3?: SomeRandomType;
irrelevantProp4?: SomeRandomType;
}
два интерфейса. и я хочу ввести объект, подобный этому
const obj = {
relevantProp1: //..,
relevantProp2: //..
relevantProp3: //..
}
таким образом, он имеет части из обоих интерфейсов, но только частично.
Я думал о том, как это сделать, interface Interface3 extends Interface1, Interface2 {}
и тип Partial<Interface3>
но я не уверен, что есть лучший способ сделать это
Ответ №1:
Вы можете использовать Pick<Type, 'attr1' | 'attr2' | ...>
и объединение ( amp;
) для достижения этой цели:
type Interface3 = Pick<Interface1, 'relevantProp1' | 'relevantProp2'> amp; Pick<Interface2, 'relevantProp3'>
В вашем примере это будет эквивалентно:
interface Interface3 {
relevantProp1: RelevantProp1;
relevantProp2?: RelevantProp2;
relevantProp3: RelevantProp3;
}
Или, альтернативно, использовать Omit<Type, Keys>
для удаления нежелательных атрибутов.