gpt4 book ai didi

typescript - 如何从 union 获取 "optional"属性?

转载 作者:行者123 更新时间:2023-12-05 01:15:32 27 4
gpt4 key购买 nike

这是我想要实现的:

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;

你可以看到这个 here 的例子.

或者您可以使用以下函数使其更通用:

const get = (point: Point, prop: string): number => prop in point ? point[prop] : undefined

in关键字实际上是一个 javascript 运算符,但它经常用于 typescript 中的这种情况(例如,参见一个很好的例子 here )

关于typescript - 如何从 union 获取 "optional"属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55904032/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com