Чтобы отслеживать инициализируемый / инициализированный объект, я хочу создать дискриминированный союз с логическим значением. И поэтому я написал следующий код:
interface InitializingThing extends BaseThing {
initialized: false;
value: undefined;
}
interface InitializedThing extends BaseThing {
initialized: true;
value: number;
}
type Thing = InitializingThing | InitializedThing;
const thing: Thing = { initialized: false, value: undefined };
console.log(thing);
getThing().then((value: number) => {
thing.value = value;
thing.initialized = true;
}).then(() => {
if (!thing.initialized) {
return;
}
console.log(15 + thing.value);
});
(см. На Typescript площадка )
Однако это дает ошибки
Type 'number' is not assignable to type 'undefined'.(2322)
Type 'true' is not assignable to type 'false'.(2322)
По наведенному на console.log(thing)
я вижу, что типом является InitializingThing
вместо Thing
! Кажется, это root проблемы, но я не уверен, почему компилятор TS сделает это.