typescript - 如何从联合中获取“可选”属性?
问题描述
这就是我想要实现的目标:
interface Point2d {
x: number;
y: number;
}
interface Point3d {
x: number;
y: number;
z: number;
}
type Point = Point2d | Point3d;
const p: Point = getPoint();
const z: number | undefined = p.z;
但是,这是不可能的:TypeScript 将在z
未定义的最后一行出错Point2d
。有什么办法可以使这项工作?
解决方案
您可以使用类型保护来检查 z 的存在,例如
const p: Point = getPoint();
const z: number | undefined = ('z' in p) ? p.z : undefined;
你可以在这里看到一个例子。
或者您可以使用以下功能使其更通用:
const get = (point: Point, prop: string): number => prop in point ? point[prop] : undefined
in关键字实际上是一个 javascript 运算符,但它经常用于 typescript 中的此类场景(例如,请参见此处的一个很好的示例)
推荐阅读
- node.js - Running table data cumulation effectively
- python - 橙色Pi零串口python中的串行数据问题
- python - 将python数据框的值拆分为多行
- teradata - 用于查找仅包含唯一数字的数字的 SQL 代码
- sql-server - 如何读取mssql的执行时间值?
- node.js - 数据未使用 mongodb 填充到 nodejs 的选项标签中
- android - 如何检查 Linux 映像是否已成功安装到 rpi4 android 10 上的循环设备上
- android - 运行颤振医生后的问题
- python-3.x - 将具有 3 个不同值的二维列表转换为字典
- python - 列表中的 Concat 系列