有以下类型:
type TypeA = {
desc: string;
name: string;
}
type TypeB = {
desc: string;
name: string;
age: number;
}
type TypeC = {
desc: string;
name: string;
age: number;
gender: string;
}
type TypeAll = TypeA | TypeB | TypeC;我寻找了解决方案,发现Typeguards是检查自定义类型的最优雅的方式。但在所有示例中,它们都会过滤该类型的显式属性。像这样:
isTypeC(type: TypeAll):type is TypeC {
return type.gender !== undefined
} 如何在TypeA或TypeB上编写?此外,类型可能会随着时间的推移而改变(而不是在运行时!)这需要一种不检查显式属性的解决方案。这有可能吗?
发布于 2020-04-17 19:26:09
在运行时,您所拥有的只是“原始”JSON对象。因此,除了检查有效负载之外,您没有任何其他方法来断言它的类型。通常,人们会使用某种“标记”属性来安全地区分这些不同的类型,并避免在具有重叠属性的类型中出现任何混淆:
type TypeA = {
type: "A";
desc: string;
name: string;
}
type TypeB = {
type: "B";
desc: string;
name: string;
age: number;
}
type TypeC = {
type: "B";
desc: string;
name: string;
age: number;
gender: string;
}
type TypeAll = TypeA | TypeB | TypeC;这种设计模式被称为“区分联合”,即the Typescript Handbook documents the intended usage。
https://stackoverflow.com/questions/61268852
复制相似问题