我是初次输入脚本。我知道在打字稿中我们有未定义的单独类型。在这里,我将类成员声明为字符串,但是当我控制台该值时,我未定义。我认为字符串类型不支持undefined,但是在这里出现错误。
{length=32,bytes=0xf3388feaa238e92da01a21fdc477921c...2f021935af7f1883},,,,,,,,
答案 0 :(得分:1)
这是预期的,因为类型声明不会影响变量或类成员的运行时值。必须首先分配一个值。只要未分配任何值,该类成员的值将为400020
。
undefined
答案 1 :(得分:1)
TypeScript不会根据类型自动初始化属性(因为JS也没有,毕竟它也没有要使用的类型信息)。如果要确保您的类型在运行时达到最大程度,则需要将编译器配置为更严格。
该编译器的主要选项为strict
,其中包括各种检查。除此之外,您还可以打开其他一些功能。
strict
包含选项strictNullChecks
,其描述为:
在严格的null检查模式下,
null
和undefined
值不在每种类型的域中,只能分配给它们自己和any
(一个例外是{{ 1}}也可以分配给undefined
)。
...和void
:
确保在构造函数中初始化未定义的类属性。此选项要求启用
strictPropertyInitialization
才能生效。
要配置--strictNullChecks
,请创建一个strict
:
jsconfig.json
启用{
"compilerOptions": {
"strict": true,
}
}
后,您的代码将不再编译:
strict
如果您通过分配值来解决这些问题,则可以防止这些运行时错误。
class test {
a; // Member 'a' implicitly has an 'any' type.ts(7008)
b: string; // Property 'b' has no initializer and is not definitely assigned in the constructor.ts(2564)
}
let sd = new test();
console.log(sd.b)
答案 2 :(得分:0)
您没有将任何值设置为b
,因此未定义。 TypeScript不能确定其在运行时可以具有什么值。
您可能应该像这样初始化您的值:
class test {
a;
b: string = '';
}