Я некоторое время использовал 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
существует
Может ли кто-нибудь объяснить моему, почему это работает? Это правильно? Почему ? неправильно работает с типом свойства объекта?