内置类型

类型是 TypeScript 相较于 JavaScript 增加的特性,也是 TpyeScript 的重点内容。

变量声明

声明变量的类型及初始值:

1
var [变量名] : [类型] = ;

**注意:**变量不要使用 name 否则会与 DOM 中的全局 window 对象下的 name 属性出现了重名。

类型断言(C++ 中的强制类型转换,但并不完全是):

1
2
<类型> 
 as 类型
  • 当 S 类型是 T 类型的子集,或者 T 类型是 S 类型的子集时,S 能被成功断言成 T。这是为了在进行类型断言时提供额外的安全性,完全毫无根据的断言是危险的,如果你想这么做,你可以使用 any。

  • 它之所以不被称为类型转换,是因为转换通常意味着某种运行时的支持。但是,类型断言纯粹是一个编译时语法,同时,它也是一种为编译器提供关于如何分析代码的方法。

类型推断(C++ 中的 auto):使用 var 关键字。

Any 类型

任意值是 TypeScript 针对编程时类型不明确的变量使用的一种数据类型,类型核心在于不在编译时进行类型检查。

1
2
3
4
5
6
7
let x: any = 1;
x = 'I am who I am';    // 正确,Any 可以指向任意类型

x.ifItExists();    			// 正确,ifItExists方法在运行时可能存在,但这里并不会检查

let arrayList: any[] = [1, false, 'fine'];
arrayList[1] = 100;			// 正确,数组内容是 Any 类型

void/null/undefined/never

void

  • 用于标识方法返回值的类型,表示该方法没有返回值。

null

  • 在 JavaScript 中 null 表示 “什么都没有”。

  • null 是一个只有一个值的特殊类型。表示一个空对象引用。

  • typeof null === 'object'

undefined

  • 在 JavaScript 中,undefined 是一个没有设置值的变量。
  • typeof 一个没有值的变量会返回 undefined。
  • null 和 undefined 是其他任何类型(包括 void)的子类型,可以赋值给其它类型,如数字类型,此时,赋值后的类型会变成 null 或 undefined。
  • 而在 TypeScript 中启用严格的空校验特性,就可以使得 null 和 undefined 只能被赋值给 void 或本身对应的类型。

never

  • never 是其它类型(包括 null 和 undefined)的子类型,代表从不会出现的值。
  • 这意味着声明为 never 类型的变量只能被 never 类型所赋值,在函数中它通常表现为抛出异常无法执行到终止点的函数