#typescript
Вопрос:
Каков был бы наилучший способ моделирования дискриминируемых союзов в Typescript, где в идеале одно из полей имеет тип, ссылающийся на сам союз? Чтобы привести простой пример
interface Base {
kind: string;
someOtherCommonField?: any;
}
interface A extends Base {
kind: "A";
children: Base[]; // This ideally would be TheNode[], but I can't forward declare the union (can I?)
}
interface B extends Base {
kind: "B";
fieldB: number;
}
type TheNode = A | B;
function makeNode(): TheNode {
return {kind: "A", children: []};
}
const a = makeNode();
if (a.kind === "A") {
for (let c of a.children) {
if (c.kind === "A") {
c.children // This is an error
// c needs a cast to A because A#children has type Base[]
const ca = c as A;
ca.children // This works but how can I avoid casting?
}
}
}
Ответ №1:
Да, вы можете отправить объявление о союзе, как и любой другой type
Комментарии:
1. Ну, это было легко, я даже не пробовал ^.^’. Спасибо