一:TS 作为 JS 的超集,必然包含 JS 所有的数据类型,它们分别是:
Boolean、Number、String、undefined、null、 Symbol、BigInt、
Array、Function、Object
二:除此之外,TS 还新增了以下的数据类型:
元组 Tuple、枚举 enum、any 、void、never
2.1 元组 Tuple
元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同
let arr: [string, number, boolean];
arr = ["a", 2, false]; // success
arr = [2, "a", false]; // error 不能将类型“number”分配给类型“string”。 不能将类型“string”分配给类型“number”。
arr = ["a", 2]; // error Property '2' is missing in type '[string, number]' but required in type '[string, number, boolean]'
arr[1] = 996
2.2 枚举 enum
可以给一组数值赋予名字,这样对开发者比较友好。默认情况下,从0开始为元素编号。 你也可以手动的指定成员的数值。
enum Color {Red = 1, Green = 2, Blue = 4}
let c: Color = Color.Green;
2.3 any
在编写代码时,有时并不清楚一个值是什么类型,这时就需要用到any类型,它是一个任意类型,定义为any类型的变量就会绕过TypeScript的静态类型检测。对于声明为any类型的值,可以对其进行任何操作,包括获取事实上并不存在的属性、方法,并且 TypeScript 无法检测其属性是否存在、类型是否正确。
我们可以将一个值定义为any类型,也可以在定义数组类型时使用any来指定数组中的元素类型为任意类型:
let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // okay, definitely a boolean
2.4 void
void 和 any 相反,any 是表示任意类型,而 void 是表示没有类型,就是什么类型都不是。这在定义函数,并且函数没有返回值时会用到:
function warnUser(): void {
console.log("This is my warning message");
}
需要注意:void 类型的变量只能赋值为 undefined 和 null ,其他类型不能赋值给 void 类型的变量。
2.5 never
never类型表示的是那些永不存在的值的类型。 例如, never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型; 变量也可能是 never类型,当它们被永不为真的类型保护所约束时。
never类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是never的子类型或可以赋值给never类型(除了never本身之外)。 即使 any也不可以赋值给never。
const errorFunc = (message: string): never => {
throw new Error(message);
};