基本语法

TypeScript 是 JavaScript 的类型超集,这意味着所有 JavaScript 代码都是有效的 TypeScript 代码。TypeScript 在此基础上添加了许多新功能。

TypeScript 使 JavaScript 更像是一种强类型,面向对象的语言,类似于 C#和 Java。这意味着 TypeScript 代码往往更容易用于大型项目,并且代码往往更容易理解和维护。强类型还意味着语言可以(并且是)预编译,并且不能为变量分配超出其声明范围的值。例如,当 TypeScript 变量声明为数字时,你无法为其指定文本值。

这种强大的键入和面向对象使 TypeScript 更易于调试和维护,这些是标准 JavaScript 中最弱点的两个。

输入声明

你可以向变量,函数参数和函数返回类型添加类型声明。类型是在变量名后跟冒号后写的,如下所示:var num: number = 5; 编译器将在编译期间检查类型(如果可能)并报告类型错误。

var num: number = 5;
num = "this is a string";  // error: Type 'string' is not assignable to type 'number'.

基本类型是:

  • number(整数和浮点数)

  • string

  • boolean

  • Array。你可以指定数组元素的类型。定义数组类型有两种等效方法:Array<T>T[]。例如:

    • number[] - 数组
    • Array<string> - 字符串数组
  • 元组。元组具有固定数量的具有特定类型的元素。

    • [boolean, string] - 元组,其中第一个元素是布尔值,第二个元素是字符串。
    • [number, number, number] - 三个数字的元组。
  • {} - 对象,你可以定义其属性或索引器

    • {name: string, age: number} - 具有名称和年龄属性的对象
    • {[key: string]: number} - 由字符串索引的数字字典
  • enum - { Red = 0, Blue, Green } - 映射到数字的枚举

  • 功能。你可以为参数和返回值指定类型:

    • (param: number) => string - 函数取一个数字参数返回字符串
    • () => number - 没有参数返回数字的函数。
    • (a: string, b?: boolean) => void - 函数接受一个字符串,也可以选择一个没有返回值的布尔值。
  • any - 允许任何类型。涉及 any 的表达式未经过类型检查。

  • void - 表示,可用作函数返回值。只有 nullundefinedvoid 类型的一部分。

  • never

    • let foo: never;-作为​​类型保护下永远不变的变量类型。
    • function error(message: string): never { throw new Error(message); } - 作为永不返回的函数的返回类型。
  • null - 类型为 null。除非启用了严格的空检查,否则 null 是每个类型的隐式部分。

铸件

你可以通过尖括号执行显式转换,例如:

var derived: MyInterface;
(<ImplementingClass>derived).someSpecificMethod();

此示例显示了 derived 类,编译器将其视为 MyInterface。如果没有在第二行上进行转换,编译器会抛出异常,因为它不了解 someSpecificMethod(),但是通过 <ImplementingClass>derived 进行转换会建议编译器做什么。

在 Typescript 中投射的另一种方法是使用 as 关键字:

var derived: MyInterface;
(derived as ImplementingClass).someSpecificMethod();

从 Typescript 1.6 开始,默认使用 as 关键字,因为在 .jsx 文件中使用 <> 是不明确的。这在 Typescript 官方文档中提到。

可以在 TypeScript 代码中定义和使用类。要了解有关类的更多信息,请参阅类文档页面