基础类型

布尔值 boolean

最基本的数据类型就是简单的true/false值,在JavaScript和TypeScript里叫做boolean

1
let flag: boolean = false;

数字 number

和JavaScript一样,TypeScript里的所有数字都是浮点数。 这些浮点数的类型是number

1
2
3
4
let num1: number = 6 // 十进制
let num2: number = 0xf00d // 十六进制
let num3: number = 0b1010 // ES6的二进制
let num4: number = 0o744 // ES6的八进制

字符串 string

和JavaScript一样,可以使用双引号"或单引号'表示字符串。

1
2
let str: string = 'hello typescript'
str = 'hello world'

还可以使用模板字符串

1
2
3
4
5
6
7
let fullname: string = '张三'
let age: number = 24
let sentence: string = `hello! my name is ${fullname}, I am ${age} years old`
// 使用 tsc 转换后的结果
var fullname = '张三';
var age = 24;
var sentence = "hello! my name is " + fullname + ", I am " + age + " years old";

数组

有两种方式可以定义数组。
第一种:可以在元素类型后面接上[],表示由此类型元素组成的一个数组:

1
2
3
let arr1: number[] = [1, 2, 3]
// 使用 tsc 命令转换后的结果
var arr1 = [1, 2, 3]

第一种:使用数组泛型,Array<元素类型>

1
2
3
let arr2: Array<number> = [1, 2, 3]
// 使用 tsc 命令转换后的结果
var arr2 = [1, 2, 3]

元组 Tuple

元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。
如:

1
2
3
let tuple1: [string, number]
tuple1 = ['haha', 23] // ok
tuple1 = [23, 'haha'] // Error

枚举

enum类型是对JavaScript标准数据类型的一个补充。

1
2
enum Color {Red, Green, Blue}
let c: Color = Color.Green

默认情况下,从0开始为元素编号。即上面的Red=0, Green=1, Blue=2,所以此时c = 1
可以手动的指定成员的数值,如:将上面的例子改成从1开始编号:

1
2
enum Color {Red = 1, Green, Blue}
let c: Color = Color.Green

或者,全部都采用手动赋值:

1
2
enum Color {Red = 1, Green = 4, Blue = 8}
let c: Color = Color.Green

注意:枚举类型提供的一个便利是你可以由枚举的值得到它的名字。

1
2
3
enum Color {Red = 1, Green = 2, Blue = 4}
let cName: string = Color[2]
console.log(cName) // Green

Any

有时候在编程阶段还不清楚变量的类型,这种情况下,我们不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查。那么我们可以使用 any类型来标记这些变量:

1
2
3
4
5
let notSure: any = 4
notSure = false
notSure = '哈哈哈'
notSure.ifItExists() // ok
notSure.toFixed() // ok

Void

某种程度上来说,void类型像是与any类型相反,它表示没有任何类型。 当一个函数没有返回值时,你通常会见到其返回值类型是void

1
2
3
function test(): void {
console.log("This is my warning message")
}

声明一个void类型的变量没有什么大用,因为你只能为它赋予undefined和null

1
let unusable: void = undefined

Null 和 Undefined

TypeScript里,undefinednull两者各自有自己的类型分别叫做undefinednull。 和void相似,它们的本身的类型用处不是很大:

1
2
let u: undefined = undefined
let n: null = null

默认情况下null和undefined是所有类型的子类型。 就是说你可以把null和undefined赋值给number类型的变量。

Never

never类型表示的是那些永不存在的值的类型。
例如: never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型; 变量也可能是never类型,当它们被永不为真的类型保护所约束时。
never类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是never的子类型或可以赋值给never类型(除了never本身之外)。 即使any也不可以赋值给never
下面是一些返回never类型的函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 返回never的函数必须存在无法达到的终点
function error(message: string): never {
throw new Error(message);
}

// 推断的返回值类型为never
function fail() {
return error("Something failed");
}

// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {
while (true) {}
}