TypeScript 中奇怪的可选类属性

2024-01-04

突然从今天开始,下面的代码开始出现 ts2322 错误。
这在以下情况下效果很好打字稿游乐场 https://www.typescriptlang.org/play?strict=true#code/MYGwhgzhAEDS5WgbwLAChrQG5hAVwFMB%20ALmgDs8BbAIwICcBuddTYAe3IgBd69hu7egAoc%20YmUq0GASmStM0bgAsAlhAB0YwtAC82XIWYZoAX3SmgA

我找不到任何问题,但是问题出在哪里呢?

我正在使用 Visual Studio 代码 1.56.2

class Klass {
  value?: number;

  constructor(value?: number) {
    this.value = value;
  }
}

你还没有提到这一点,但我假设你正在使用 npm 中发布的夜间构建作为typescript@next。如果是这样,您可能会看到 TypeScript 4.4 的新功能“严格可选属性”的预览,如在微软/TypeScript#43947 https://github.com/microsoft/TypeScript/pull/43947。 (更新 2021-06-10)此功能最初是通过新的--strictOptionalProperties编译器标志,该标志将包含在--strict编译器选项套件 https://www.typescriptlang.org/tsconfig#strict。然而,根据这条评论 https://github.com/microsoft/TypeScript/issues/44421#issuecomment-858870879,该标志将被重命名并从--strict,因此任何想要在 TypeScript 4.4 及更高版本中看到此行为的人都需要通过一些名称尚未确定的编译器标志手动启用它。

严格的可选属性将阻止您指派 undefined到可选属性,同时仍然允许您read undefined来自这样的财产。这更符合人们长期以来对可选属性的期望,(现已最终关闭)问题证明了这一点微软/TypeScript#13195 https://github.com/Microsoft/TypeScript/issues/13195.

无论如何,这意味着从可选参数读取的值分配给相同类型的可选属性不再安全,而不先检查它是否是undefined:

class Klass {
  value?: number;

  constructor(value?: number) {
    if (value !== undefined) this.value = value;
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TypeScript 中奇怪的可选类属性 的相关文章

随机推荐