为什么我们要在angular2中声明string, number, boolean, void等等?



我很困惑为什么程序员在单独的作用域或其他地方声明类。

例子
result: boolean = false
public generateRand(x): void { }

类似
result = false
public generateRand(x) { }

**与其他声明相同。

这些声明背后的原因是什么?它是编程或面向对象的适当实践(不确定,因为我没有很好地掌握它)?

TypeScript是JavaScript的超集——这意味着TypeScript是JavaScript + more,其中more部分是类型注释。

TypeScript有一个.ts扩展。你可以通过运行以下命令编译TypeScript:

tsc greeter.ts

类型注释为您提供类型安全。也就是说,当编译typescript时,编译器会查看静态类型,并确保函数或变量契约在编译脚本时有效。否则,当类型或契约不兼容时,编译器会报错。

function greeter(person: string) {
    return "Hello, " + person;
}
var user = "Jane User";
document.body.innerHTML = greeter(user);

函数greeter需要一个字符串作为参数。此代码在语法上是有效的,并且可以愉快地编译,没有编译时错误。

另一方面,如果传递的类型(如数组)不正确:

function greeter(person: string) {
    return "Hello, " + person;
}
var user = [0, 1, 2];
document.body.innerHTML = greeter(user); 

编译脚本时会显示错误:

greeter.ts(7,26): Supplied parameters do not match any signature of call target

主要原因是静态类型

Javascript是一种动态类型语言。也就是说,变量的类型是在运行时推断的。这可能会给开发人员带来麻烦,如果他们在变量中放置了错误的类型(例如:在应该是Number的地方放置了String) TypeScript通过在代码中定义变量的类型来避免这些错误。因此,任何尝试放入不同类型的值(例如,数字中的字符串)都会导致错误。它还有助于代码完成,因为它知道返回的是什么类型的值。

但是这些类型只存在于源代码中。在编译后的JS中,没有它们的踪迹。

干杯!

你是对的。您不应该在那个特定的示例中声明类型,因为类型已经通过类型推断

得到确认。

但是,您需要考虑为没有初始值的变量声明类型,并且您显式地希望这些变量存储特定类型的值:

isActive: boolean;
errorMessage: string;

当:

1您希望在开发周期中更快地检测到与类型相关的错误。例如,如果省略类型:

,这段代码可能会产生意想不到的错误。
isActive: any;
...
this.isActive = "false";
...
if (!this.isActive) {
  // this will not happen
}
  • 你想要更好的智能感知。
  • 最新更新