# 原始数据类型 & 联合类型
# 数值
let notANumber: number = NaN;
let infinityNumber: number = Infinity;
1
2
2
NaN
和Infinity
都是属于number
类型.
# 空值
void
可以表示没有返回值的函数:
function alertName(): void {
alert("My name is Tom");
}
1
2
3
2
3
void
也可以用来定义null
和undefined
的类型:
let u: void = undefined;
1
# Null
& Undefined
在 TypeScript 中, 可以使用 null 和 undefined 来定义这两个原始数据类型:
let u: undefined = undefined;
let n: null = null;
1
2
2
与 void 的区别是,undefined 和 null 是所有类型的子类型。也就是说 undefined 类型的变量,可以赋值给 number 类型的变量:
// 这样不会报错
let num: number = undefined;
// 这样也不会报错
let u: undefined;
let num: number = u;
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'.
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.");
}
}
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";
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)
1
2
3
4
5
2
3
4
5
由上面的报错看见, unknown
是一个明明确确的一个类型,它和any
区别在于, 使用any
的变量等于禁用了类型检查.
# 联合类型
联合类型(Union Types)表示取值可以为多种类型中的一种.
let myFavoriteNumber: string | number;
myFavoriteNumber = "seven";
myFavoriteNumber = 7;
1
2
3
2
3
当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候, 我们只能访问此联合类型的所有类型里共有的属性或方法. 比如当联合类型是string
和number
时, 访问.length
是会报错的.
← Introduction 接口 →