Я чаще использую дискриминационные союзы (ДУ) и полюбил их. У меня, однако, есть одна проблема, которую я не могу решить. Если вы встроите логическую проверку для DU, вы можете положиться на TypeScript (TS), чтобы автоматически определить тип для вас. Однако, если вы извлечете логическую проверку, TS больше не сможет сузиться до указанного подтипа c DU. Мне известны средства защиты типов, но я хотел бы знать, почему компилятор не поддерживает извлеченные онлайн-проверки, в частности.
Это известное ограничение? Должен ли я подать запрос об ошибке / функции?
Пример здесь (w / TypeScript Playground Link ):
type A = { type: "A"; foo: number };
type B = { type: "B"; bar: string };
type DU = A | B;
const checkIt = (it: DU) => {
const extractedCheck = it.type === "A";
if (extractedCheck) {
// it does not get narrowed
console.log(it.foo); // Error: Property 'foo' does not exist on type 'DU'.
}
if (it.type === "A") {
// but this is fine
console.log(it.foo);
}
};