# 原始数据类型 & 联合类型
# 数值
let notANumber: number = NaN; let infinityNumber: number = Infinity;
Copied!
1
2
2
NaN
和Infinity
都是属于number
类型.
# 空值
void
可以表示没有返回值的函数:
function alertName(): void { alert("My name is Tom"); }
Copied!
1
2
3
2
3
void
也可以用来定义null
和undefined
的类型:
let u: void = undefined;
Copied!
1
# Null
& Undefined
在 TypeScript 中, 可以使用 null 和 undefined 来定义这两个原始数据类型:
let u: undefined = undefined; let n: null = null;
Copied!
1
2
2
与 void 的区别是,undefined 和 null 是所有类型的子类型。也就是说 undefined 类型的变量,可以赋值给 number 类型的变量:
// 这样不会报错 let num: number = undefined; // 这样也不会报错 let u: undefined; let num: number = u;
Copied!
1
2
3
4
5
6
2
3
4
5
6
可是void
类型的变量不能赋值给其他类型:
let u: void; let num: number = u; // Type 'void' is not assignable to type 'number'.
Copied!
1
2
3
4
2
3
4
# never
& unknown
never
是一个函数的返回类型, 适用于 js 无法正常执行下去的情况:
// 情况一: function throwError(errorMsg: string): never { throw new Error(errorMsg); //抛出错误, 无法继续执行后面的代码 } // 情况二: function keepProcessing(): never { while (true) { console.log("I always does something and never ends."); } }
Copied!
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
unknown
表示当前无法确定该变量的类型.
let a: unknown; a = 1; a = "xxx";
Copied!
1
2
3
4
2
3
4
上面的代码能够通过编译, 不会报错. 那么, 把a
定义为any
类型, 上面的代码也是能够通过编译的, 那么它和any
的区别是什么?
let a: unknown; let s: string; a = "string"; s = a; // !Type 'unknown' is not assignable to type 'string'.ts(2322)
Copied!
1
2
3
4
5
2
3
4
5
由上面的报错看见, unknown
是一个明明确确的一个类型,它和any
区别在于, 使用any
的变量等于禁用了类型检查.
# 联合类型
联合类型(Union Types)表示取值可以为多种类型中的一种.
let myFavoriteNumber: string | number; myFavoriteNumber = "seven"; myFavoriteNumber = 7;
Copied!
1
2
3
2
3
当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候, 我们只能访问此联合类型的所有类型里共有的属性或方法. 比如当联合类型是string
和number
时, 访问.length
是会报错的.
← Introduction 接口 →