Необязательное свойство объекта Typescript работает только с объединением void? - PullRequest
0 голосов
/ 29 июня 2018

Я некоторое время использовал Typescript и просто столкнулся с этим интересным поведением. Я хочу создать необязательное свойство объекта на интерфейсе, который является безопасным типом. Первый метод, который я попробовал, был такой:

type StrNumDict = { 
  [key: string]: number;
};

interface Bar {
  bar: string;
  foo?: StrNumDict;
}

const y: Bar = {
  bar: 'xxx'
}

console.log(y.foo.x);

Проблема с этим в том, что компилятор машинописного текста не выдает ошибку, когда я делаю console.log(y.foo.x); (должно быть, поскольку x может быть неопределенным)

Итак, я поиграл и сделал следующее (мне нужно, чтобы я набрал его, чтобы я не мог использовать object):

interface Bar {
  bar: string;
  foo?: void | StrNumDict;
}

console.log(y.foo.x);

Typescript выдает ошибку правильно, как 'x' does not exist on type 'void | StrNumDict', и я должен проверить, x существует

Может ли кто-нибудь объяснить моему, почему это работает? Это правильно? Почему ? неправильно работает с типом свойства объекта?

...