“?”有什么区别?和“|未定义”?

问题描述 投票:0回答:1

我想知道,之间是否有区别(实际或最佳实践方面)

interface Fruit {
  cost?: number;
}

interface Fruit {
  cost: number | undefined;
}

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

如果没有,为什么人们会更喜欢

| undefined
?:
(或反之亦然)?

有点困惑,因为我两种都看过,不确定是否真的有真正的原因选择其中一种,或者是否只是归结为偏好。

谢谢!

typescript option-type optional-parameters
1个回答
15
投票

一个区别是

cost: number | undefined;
要求 属性存在,并且具有类型为
number
undefined
的值。相反,
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
选项。

© www.soinside.com 2019 - 2024. All rights reserved.