首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查变量是否属于具有相同属性的Typescript中的自定义类型

检查变量是否属于具有相同属性的Typescript中的自定义类型
EN

Stack Overflow用户
提问于 2020-04-17 18:01:22
回答 1查看 208关注 0票数 1

有以下类型:

代码语言:javascript
复制
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是检查自定义类型的最优雅的方式。但在所有示例中,它们都会过滤该类型的显式属性。像这样:

代码语言:javascript
复制
isTypeC(type: TypeAll):type is TypeC {
  return type.gender !== undefined
}    

如何在TypeA或TypeB上编写?此外,类型可能会随着时间的推移而改变(而不是在运行时!)这需要一种不检查显式属性的解决方案。这有可能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-17 19:26:09

在运行时,您所拥有的只是“原始”JSON对象。因此,除了检查有效负载之外,您没有任何其他方法来断言它的类型。通常,人们会使用某种“标记”属性来安全地区分这些不同的类型,并避免在具有重叠属性的类型中出现任何混淆:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61268852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档