"?"和"| undefined"之间有什么区别?

12
我在想,实际上或者从最佳实践的角度来看,这两者之间是否有区别?
interface Fruit {
  cost?: number;
}

并且

interface Fruit {
  cost: number | undefined;
}

如果在行为方面确实有差异,那么是什么差异呢?
如果没有差异,为什么会有人更喜欢使用 `| undefined` 或者 `?:`(或者反过来)?
有点困惑,因为我见过两种写法,不确定是否有实际的理由偏好其中一种,或者只是个人喜好的问题。
谢谢!

1
这个回答解决了你的问题吗?TypeScript中可选类型和type | undefined之间的区别 - undefined
1个回答

15
一种区别是cost: number | undefined;要求属性存在,并且具有类型为numberundefined的值。相比之下,cost?: number允许属性根本不存在。
这将无法编译:
interface Fruit {
    cost: number | undefined;
}
const x: Fruit = {};

为了使其运作正常,您需要执行以下操作:

interface Fruit {
    cost: number | undefined;
}
const x: Fruit = { cost: undefined };

但这样做是成功的:

interface Fruit {
    cost?: number;
}
const x: Fruit = {};

当存在替代方案时,显式地对 undefined 进行类型定义可能会变得冗长无比,所以你可能更愿意选择 cost?: number 选项。


哇,说实话我不知道 - 我的直觉一直是喜欢使用 ?: 而不是 | undefined,但我无法用言语表达出来 - 从未想过真正去尝试。这很有道理 - 感谢您详细的解释! - Baggio Wong
我刚刚进行了一些实验,这也适用于函数参数 - 多么有趣的功能。一定会记住这个。再次感谢! - Baggio Wong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接