Bigint
从3.2开始,ts内置了bigint
类型来支持理论上任意大的整数类型。使用该类型,需要指定配置文件的target
为ES2020
以上,如ESNEXT
:
{
"compilerOptions": {
"target": "ESNEXT"
}
}
使用bigint
类型的变量有两个方式:使用bigint
类型标识,并在数字结尾加n
;或者使用Bigint()
函数。
const bigintVal: bigint = 1n;
const bigintVal2: bigint = BigInt(10);
注意虽然上一节讲到的number
和bigint
都是代表数字,但是两者完全不同。
const bigintVal: bigint = 1n;
const numVal1 = 1;
// Cannot assign to 'bigintVal' because it is a constant
bigintVal = numVal1;
// false
bigintVal === numVal1;
数组(Array)
数组是js中十分常见的数据类型,在ts中对数组的定义可以是:
- 类型 + 方括号
- 使用
Array
泛型(泛型章节对此有更详细的说明)
const arr1: string[] = ["str1", "str2"];
const arr2: Array<string> = ["str1", "str2"];
// 二维数组
const arr3: string[][] = [
["str1", "str2"],
["str3", "str4"],
];
const arr4: Array<Array<string>> = [
["str1", "str2"],
["str3", "str4"],
];
指定了类型的数组不允许出现其他类型的变量,如string[]
类型的数组中不允许出现number
类型变量
数组声明还有一个只读数组,即是用readonly
关键字或者 ReadonlyArray
泛型声明的数组,只读数组在创建后不能做任何修改,并且不能把一个只读数组的变量赋值给一个常规数组
const a: readonly number[] = [1, 2, 3];
const arr: ReadonlyArray<string> = [];
// error
arr.push(1);
arr.length = 1;
arr[0] = "1";
// string[] Cannot assign to 'arr1' because it is a constant
const arr1: string[] =arr;
元组(Tuple)
元组和数组的形式非常相似,相当于是指定长度和变量类型的数组,且各个元素的类型不必相同。
const tuple1: [string, number, boolean] = ["str", 1, true];
元组的各个元素必须和指定类型一致,并且元素个数不能多也不能少,必须严格按照声明类型,否则会报错。