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

时间:2016-10-12 02:18:37

标签: angular

我很困惑为什么程序员在个别范围内宣布课程。

实施例

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

这也类似于

result = false
public generateRand(x) { }

**与其他声明相同。

这些声明背后的原因是什么?这是编程或OOP的正确练习(由于我不能很好地掌握它,所以不确定这一点)?

3 个答案:

答案 0 :(得分:2)

主要原因是静态打字

Javascript是一种动态类型语言。也就是说,在运行时推断变量的类型。如果开发人员在变量中输入了错误的类型,这会给开发人员带来麻烦(例如:将字符串放在一个数字应该是的位置)

TypeScript通过在代码中定义变量的类型来避免这些错误。因此,任何尝试放置不同类型的值(示例,字符串在数字中)都将导致错误。它还有助于代码完成,因为它知道返回的是什么类型的值。

但这些类型仅存在于源中。在编译的JS中,没有它们的痕迹。

干杯!

答案 1 :(得分:2)

你是对的。您不应在该特定示例中声明类型,因为该类型已通过Type Inference

确认

但是,您需要考虑将类型声明为没有初始值的变量,并且您明确希望这些变量存储某种类型的值:

isActive: boolean;
errorMessage: string;

在以下情况下有所帮助:

1.您希望在开发周期中更快地检测到与类型相关的错误。例如,如果省略类型,则此代码可能会产生意外错误:

isActive: any;
...
this.isActive = "false";
...
if (!this.isActive) {
  // this will not happen
}
  1. 你想要更好的智能感知。

答案 2 :(得分:2)

TypeScript是JavaScript的超集 - 这意味着TypeScript是JavaScript +更多,其中 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需要一个字符串作为参数。此代码在synatically有效,并且很高兴编译时没有编译时错误。

另一方面,如果传递了错误的类型(例如数组):

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