gpt4 book ai didi

typescript - 为什么 TypeScript 中的非可选属性的属性初始化是可选的?

转载 作者:搜寻专家 更新时间:2023-10-30 21:39:29 27 4
gpt4 key购买 nike

考虑这个例子:

class A {
optional?: string;
nonOptional: string;
constructor() {

}
}

let a = new A();

function consumeString(str: string) {
console.log(str.length);
}

consumeString(a.optional);
consumeString(a.nonOptional);

启用 strictNullChecks 后,TypeScript 2.4.2 将拒绝第一个调用;

Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
Type 'undefined' is not assignable to type'string'`.

但是,在运行时,第二次调用也会失败,因为 a.nonOptional 不引用字符串。

为什么 TypeScript 不强制初始化 nonOptional

最佳答案

这是 TypeScript 中的错误或设计错误,已在 TypeScript 2.7 中修复。

默认情况下,TypeScript 2.7 会拒绝您的代码,并会提示 nonOptional 需要初始化。

TypeScript 2.7 引入了 strictPropertyInitialization 功能,要求必须在构造函数(或我的分配默认值)中初始化类的强制字段。

(您可以通过将 strictPropertyInitialization = false 传递给编译器来禁用此检查以恢复到 TypeScript <2.7 行为,但不鼓励这样做)。

关于typescript - 为什么 TypeScript 中的非可选属性的属性初始化是可选的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45297151/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com