【问题标题】:Why TypeScript accept not to use "?" operator if object is an optional? [closed]为什么 TypeScript 接受不使用“?”如果对象是可选的,则运算符? [关闭]
【发布时间】:2021-05-07 23:00:57
【问题描述】:

这里我们有这个方法:

export const showGiftedOrGiftingEmail = (
  transaction: Transaction
): { [a: string]: string } | null => {

它清楚地返回一个可选的,要么是一个对象,要么是null。但是这里它接受没有?操作符的表达式,为什么?

showGiftedOrGiftingEmail(props.transaction).email

?

showGiftedOrGiftingEmail(props.transaction)?.email

如果 Typescript 不强制实现这种类型安全,那么使用 Typescript 的意义何在? Swift 永远不会接受第一个表达式。

【问题讨论】:

  • 您是否开启了严格的空值检查?毕竟,严格的空检查是可选的。
  • "为什么 web 有 null 和 undefined 表达式?" What is the difference between null and undefined in JavaScript?
  • Swift 是如何参与到这段代码中的?
  • 对于我删除的第二个问题,请参见例如stackoverflow.com/q/61036776/3001761
  • @VLAZ Swift 参与其中,因为 Swift 也实现了可选模式,但以更合乎逻辑的方式。它们只有一种状态,代表不存在的价值。 JS null / undefined 状态是可以忍受的吗?我只想指出 Swift 解决方案更强大且更易于理解。

标签: swift typescript optional


【解决方案1】:

如果 Typescript 不强制实现这种类型安全,那么使用 Typescript 的意义何在? Swift 永远不会接受第一个表达式。

默认情况下,TypeScript 也不接受第一个示例。你可以看到它是如何给出错误here

如果您关闭strictNullChecks,它将停止给出该错误。这是预期的行为。将现有的 JS 代码库迁移到 TS 时,flag 的一种可能用途是。

为什么 web 有 null 和 undefined 表达式?好像有点矫枉过正。

null 用于您知道设置为空的值(如您的示例中)。 undefined 是它们在声明但未设置值时获得的默认值。当您想要检查某些内容是否有意或默认设置为空时,这实际上很有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 2011-02-04
    • 1970-01-01
    • 2016-06-03
    相关资源
    最近更新 更多