在Typescript中,您可以通过多种方式定义布尔变量,例如:
let a = true;
let b: boolean = true;
由于true
已经是布尔值,将它定义为变量类型仍然很常见(如b所示)?
如果是这样,对所有原始类型都一样吗?
答案 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`