基础类型

number

1
2
3
4
5
let num: number = 1;
let num2: number = 0xA8;
let num3: number = 0o17;
let num4: number = 0b11;
let str: number = "test"; // error

string

1
2
3
let str: string = "test";
let str: string = true; // error
let str: string = null; // success

turple

1
2
3
let arr: [string, number];
arr = ["test", 1];
arr = [1, "test"]; // error

Array

1
2
let arr: Array<int> = [1, 2];
let arr_1: string[] = ["1", "2"];

bool

1
let hasDone: bool = true;

any

不希望进行类型检查,使用any。

与 Object 不同,Object 无法使用方法,而 any 会假设有这个方法存在。

1
2
3
let _any: any = 1;
_any = "test";
_any = ["1", 3];

enum

1
2
3
4
5
enum Color {
Green = 2,
Red,
Blue
}

编译后

1
2
3
4
5
6
var Color
(function(Color) {
Color[Color["Green"] = 2] = "Green";
Color[Color["Red"] = 3] = "Red";
Color[Color["Blue"] = 4] = "Blue";
})(Color || Color = {});

void

null & undefined

null 和 undefined 是所有类型的子类型,可以将二者赋值给任意类型

1
2
let undf: null = undefined;
let _null: null = null;
1
2
let undf: undefined = undefined;
let _null: undefined = null;

void

表示空返回值,一般没有什么用

1
function fun(): void {}

never

永远不存在的类型

这要涉及到底层类型

当一个函数永远不会执行完(死循环)或者总是抛出错误(throw),那么他永远没有返回值,也就是永远执行不到函数的末尾

则可定义函数返回值为 never

1
2
3
function fail(): never {
throw new Error('failed');
}

与 void 差别在于, void 会执行到函数的尾部,但是没有return语句,但是底层是会默认返回一个值,其值为空,即void,而never是永远不会返回任何值。

object

非基本类型(bool, number, string, null, undefined, symbol)

与 Object 区分,object是接收非原始类型,Object是能接收任何类型但是只能调用Object的方法

1
2
3
let obj: object;
obj = {};
obj = 1; // error

类型断言

相当于类型强制转换一般

1
2
3
let a: any = "haha";
(a as string).indexOf("ha"); // success
// (<string>a).indexOf("ha"); // success

推荐使用 as 写法

待续…