@MishaXXL

Почему при создании объединенного типа из нескольких в условии не работает условие или?

Почему в данном примере я не могу задать свойство 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...
  • Вопрос задан
  • 96 просмотров
Решения вопроса 1
Col | ColWithMain работает взаимоисключающе. Вы определяете тип но полю type. Почитайте https://habr.com/ru/articles/778060/.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы