打字稿类型字符串的值不确定

时间:2019-09-27 06:17:45

标签: typescript

我是初次输入脚本。我知道在打字稿中我们有未定义的单独类型。在这里,我将类成员声明为字符串,但是当我控制台该值时,我未定义。我认为字符串类型不支持undefined,但是在这里出现错误。

{length=32,bytes=0xf3388feaa238e92da01a21fdc477921c...2f021935af7f1883},,,,,,,,

3 个答案:

答案 0 :(得分:1)

这是预期的,因为类型声明不会影响变量或类成员的运行时值。必须首先分配一个值。只要未分配任何值,该类成员的值将为400020

undefined

答案 1 :(得分:1)

TypeScript不会根据类型自动初始化属性(因为JS也没有,毕竟它也没有要使用的类型信息)。如果要确保您的类型在运行时达到最大程度,则需要将编译器配置为更严格。

该编译器的主要选项为strict,其中包括各种检查。除此之外,您还可以打开其他一些功能。

strict包含选项strictNullChecks,其描述为:

  

在严格的null检查模式下,nullundefined值不在每种类型的域中,只能分配给它们自己和any(一个例外是{{ 1}}也可以分配给undefined)。

...和void

  

确保在构造函数中初始化未定义的类属性。此选项要求启用strictPropertyInitialization才能生效。

(来自options documentation

要配置--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 = '';
}