?: 和 | 有什么区别?在 TypeScript 中未定义?

Bag*_*ong 4 optional-parameters optional typescript

我想知道,两者之间是否存在差异(实际或最佳实践明智)

interface Fruit {
  cost?: number;
}
Run Code Online (Sandbox Code Playgroud)

interface Fruit {
  cost: number | undefined;
}
Run Code Online (Sandbox Code Playgroud)

如果在行为方面存在实际差异,那是什么?

如果没有,为什么会更喜欢| undefined?:(反之亦然)?

有点困惑,因为我两者都看过,并且不确定是否真的有真正的理由让一个人更喜欢另一个,或者它是否只是归结为偏好。

谢谢!

Cer*_*nce 6

一个区别是cost: number | undefined; 要求属性存在,并且具有类型为numberor的值undefined。相反,cost?: number允许属性根本不存在。

这无法编译:

interface Fruit {
    cost: number | undefined;
}
const x: Fruit = {};
Run Code Online (Sandbox Code Playgroud)

要使其正常工作,您必须执行以下操作:

interface Fruit {
    cost: number | undefined;
}
const x: Fruit = { cost: undefined };
Run Code Online (Sandbox Code Playgroud)

但这成功了:

interface Fruit {
    cost?: number;
}
const x: Fruit = {};
Run Code Online (Sandbox Code Playgroud)

undefined当有替代方案时,显式键入可能会很乏味,因此您可能更喜欢该cost?: number选项。