TypeScript中奇怪的可选类属性
从今天开始,以下代码突然出现ts2322错误。TypeScript中奇怪的可选类属性,typescript,Typescript,从今天开始,以下代码突然出现ts2322错误。 这在中国很有效 我没发现有什么问题,但有什么问题吗 我使用的是Visual Studio代码1.56.2 class Klass { value?: number; constructor(value?: number) { this.value = value; } } 您没有提到这一点,但我假设您使用的是npm中发布的夜间版本typescript@next。如果是这样,您可能会看到TypeScript 4.4的一个新功能
这在中国很有效 我没发现有什么问题,但有什么问题吗 我使用的是Visual Studio代码1.56.2
class Klass {
value?: number;
constructor(value?: number) {
this.value = value;
}
}
您没有提到这一点,但我假设您使用的是npm中发布的夜间版本
typescript@next
。如果是这样,您可能会看到TypeScript 4.4的一个新功能预览,“严格可选属性”,如中所实现。(更新2021-06-10)此功能最初将通过新的--strictOptionalProperties
编译器标志启用,该标志将包含在中。但是,根据,该标志将被重命名并从--strict
中删除,因此任何想要在TypeScript 4.4及更高版本中看到此行为的人都需要通过尚未确定名称的编译器标志手动启用它
严格的可选属性将阻止您将未定义
指定给可选属性,同时仍允许您从此类属性读取未定义
。这更符合人们长期以来对可选房地产的期望,这一点可以从(现在终于结束的)问题中得到证明
无论如何,这意味着将从可选参数读取的值分配到同一类型的可选属性中不再安全,而不首先检查它是否未定义
:
class Klass {
value?: number;
constructor(value?: number) {
if (value !== undefined) this.value = value;
}
}
我有VsCode 1.56.2,但没有typescript@next我在typescript v4.1中得到了这些错误。2@AlessioCancian如果您真正使用的是TS 4.1,则没有任何机制可以让您看到此特定错误(无法将
未定义的
指定给可选属性);如果你不坐在电脑前,我无法确定到底发生了什么,但如果我是你,我会加倍检查你的假设(例如,您确实在使用您认为正确的TS版本;您确实看到了相同的错误;您实际上只是试图将未定义的值分配给可选属性,等等),然后如果您没有发现问题,请尝试在新问题中添加一个。我发现了问题,我的项目使用的是typescript v4.1.2,但VsCode使用的是4.4.0-dev。第一次看到此设置时,我必须将底部状态栏中的typescript版本更改为使用工作区版本
,而不是使用VS code的版本