我很困惑为什么程序员在单独的作用域或其他地方声明类。
例子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
}
- 你想要更好的智能感知。