TypeScript: необязательные типы слияния
Sep 12 2020
У меня есть тип aи тип b, но это должно работать с любым количеством типов.
type a = {
first: number
}
type b = {
second: string
third: string
}
Я хочу создать тип, который необязательно объединяет все эти типы, поэтому, если у него будет secondполе, оно также должно иметь thirdполе, но не обязательно, чтобы они оба:
Хорошо:
const aa = {
first: 1,
second: "hi",
third: "hello"
}
const ab = {
first: 1
}
const ac = {
second: "hi",
third: "hello"
}
Плохо:
const bb = {
first: 1,
second: "hi"
}
Как я мог определить такой тип?
Ответы
6 Lesiak Sep 12 2020 at 05:15
type None<T> = {[K in keyof T]?: never}
type EitherOrBoth<T1, T2> = T1 & None<T2> | T2 & None<T1> | T1 & T2
type abcombined = EitherOrBoth<a,b>
См. Более подробный пример по адресу: Интерфейсы TypeScript выражают ограничения совместного появления для свойств
Ссылка на игровую площадку
KaranKumar Sep 12 2020 at 05:01
Я не уверен, что ты мог это сделать. Вот что бы я сделал:
Вы можете использовать "|" оператор при определении переменной.
type a = {
first: number
}
type b = {
second: string
third: string
}
const test: a | b ={ first: 3, second: 'string'}