Почему в данном примере я не могу задать свойство
main: 'spb'
, ведь в одном из перечисленных типов
"ColWithMain"
у меня есть свойство
main
Если я правильно понял, то выражение
type Switch = (Nav & (Col | ColWithMain )) | null
создает тип с полями
Nav
и на выбор одним из вариантов
Col
или
ColWithMain
, т.е.
Nav + Cal
или
Nav + ColWithMain
type Nav = {
nav?: {
count: number;
key: string;
}
}
type Col = {
type: "col";
label: string;
value: string;
}
type ColWithMain = {
type: "colWith";
label: string;
value: string;
main?: string;
}
type Switch = (Nav & (Col | ColWithMain )) | null
type Single = {
name: string;
props: Switch;
}
const test: Single = {
name: 'Hello',
props: {
nav: {
count: 1,
key: 'local'
},
type: 'col',
label: 'hello',
value: 'world',
main: 'spb'
}
}
Не понял, почему здесь идет речь только о
'Nav & Col'
, если у нас есть условие или, где есть и
'Nav & ColWithMain '
Object literal may only specify known properties, and 'main' does not exist in type 'Nav & Col'.(2353)
input.tsx(25, 3): The expected type comes from property 'props' which is declared here on type 'Single'
(property) main?: string | undefined
И что даст здесь выражение
props: Record<string, Switch>
?
Если наш тип будет выглядеть так
type Single = {
name: string;
props: Record<string, Switch> | Switch | null;
}
https://www.typescriptlang.org/play?#code/C4TwDgpg...