变量定义中类型的Typescript约定

时间:2016-03-29 09:31:09

标签: typescript

在Typescript中,您可以通过多种方式定义布尔变量,例如:

let a = true;

let b: boolean = true;

由于true已经是布尔值,将它定义为变量类型仍然很常见(如b所示)?

如果是这样,对所有原始类型都一样吗?

2 个答案:

答案 0 :(得分:2)

事实上,使用第一种方法,您没有定义类型(对于TypeScript),因此您可以将a变量中的所需内容作为值。不要忘记JavaScript是动态的。此外,在编译时无法检查使用变量时是否提供了正确的类型。

你可以这样:

let a = true;
a = 'test';

使用第二种方法,您可以在编译时检查b的类型是否符合预期:当用作方法的参数时,当受到另一个变量属性的影响时,... < / p>

最好利用TypeScript的强类型进行静态检查。这将使您能够在实施阶段(而不是在运行时)轻松检测潜在问题。

例如:

let a:boolean = true;
a = 'test'; // compilation error

答案 1 :(得分:1)

TypeScript根据初始赋值(Read more)隐式输入变量。所以这里的两个变量都输入为boolean

let a = true;          // implicitly typed as boolean
let b: boolean = true; // explicitly typed as boolean

分配不同类型时,两者都会出错:

a = "a string";        // error, type 'string' is not assignable to type 'boolean'
b = "a string";        // error, type 'string' is not assignable to type 'boolean'

对于你是明确还是暗示没有约定,但我强烈建议放弃let a: boolean = true;的详细程度。写let a = true;代替它更短。作业清楚地显示了类型,因此确实没有必要明确并且说明两次。

隐含的Anys

你应该注意&#34;隐含任何类型&#34;。如果初始语句中没有赋值且未指定类型,则会发生这种情况:

let a; // implicitly typed as `any`

可以以任何方式使用此变量:

a = true;       // ok
a = "a string"; // ok

在这种情况下,您应该明确说明类型:

let a: boolean;
a = true;       // ok
a = "a string"; // error, type 'string' is not assignable to type 'boolean' -- good!

您可以通过打开编译器选项--noImplicitAny来完全避免意外定义隐式任何类型,这会在您执行此操作时引发编译错误。我建议启用此功能。

let a; // compile error with `--noImplicitAny`