typescript - TypeScript 中奇怪的可选类属性

标签 typescript

突然从今天开始,下面的代码开始出现ts2322错误。
这在 Typescript playground 中运行良好
我找不到任何问题,但有什么问题?
我正在使用 Visual Studio Code 1.56.2

class Klass {
  value?: number;

  constructor(value?: number) {
    this.value = value;
  }
}
enter image description here

最佳答案

您还没有提到这一点,但我假设您正在使用 npm 中发布的夜间构建版本 typescript@next .如果是这样,您可能会看到 TypeScript 4.4 的新特性“严格可选属性”的预览,如 microsoft/TypeScript#43947 中实现的那样。 . (更新 2021-06-10)此功能最初将通过新的 --strictOptionalProperties 启用编译器标志,该标志将包含在 --strict suite of compiler options 中.然而,根据this comment ,该标志将被重命名并从 --strict 中删除,因此任何想要在 TypeScript 4.4 及更高版本中看到此行为的人都需要通过一些尚未确定名称的编译器标志手动启用它。
严格的可选属性将阻止您分配 undefined到可选属性,同时仍然允许您阅读 undefined从这样的属性(property)。这更符合人们长期以来希望可选属性的方式,正如(现已最终关闭)问题 microsoft/TypeScript#13195 所证明的那样。 .
无论如何,这意味着将从可选参数读取的值分配给相同类型的可选属性不再安全,而不先检查它是否是 undefined :

class Klass {
  value?: number;

  constructor(value?: number) {
    if (value !== undefined) this.value = value;
  }
}
Playground link to code

关于typescript - TypeScript 中奇怪的可选类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67822178/

相关文章:

html - 如何设置 Angular 6 Material sidenav 从屏幕右侧从右向左打开

arrays - typescript - 初始化二维数组错误

其参数应接受两种类型之一的 TypeScript 函数

javascript - 使用 SystemJS 加载扩展其他类的类

javascript - Angular 2动态设置输入最大长度

typescript - 如何将 TypeScript 可变元组类型用于笛卡尔积函数?

typescript - 如何在 Type Script 中导入 CSV 文件和文本文件

javascript - 错误不允许用户代理 Ionic 2 [InAppBrowser]

javascript - textarea resize 在 IE 中不起作用,我想在 IE 中调整大小,它在 chrome 中工作

javascript - 在名为 "then"的类方法中异步/等待