TypeScript 基本类型
在 TypeScript 中,我们可以为变量、函数参数、函数返回值等指定类型。指定类型可以提高代码的可读性和可维护性,同时也能避免一些潜在的错误。下面我们来详细了解一下 TypeScript 支持的各种基本类型。
原始数据类型
TypeScript 支持与 JavaScript 几乎相同的数据类型,具体包括:
boolean 布尔值,如:
let isDone: boolean = false;
number 数字,支持整数、浮点数、二进制、八进制和十六进制,如:
let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;
string 字符串,支持单引号、双引号和模板字符串,如:
let color: string = 'blue';
color = 'red';
let sentence: string = `Hello, my name is ${fullName}.`;
null 和 undefined,它们是所有类型的子类型,可以赋值给任何类型的变量。但是当启用--strictNullChecks
标记,null 和 undefined 只能赋值给 void 和它们各自的类型。
symbol 表示独一无二的值,通过 Symbol 构造函数创建,如:
let sym1 = Symbol();
let sym2 = Symbol('key');
bigint 表示任意精度的整数,使用 BigInt 函数创建,如:
const oneHundred: bigint = BigInt(100);
const anotherHundred: bigint = 100n;
数组与元组
数组类型可以用两种方式表示:
// 元素类型后面接上[]
let list: number[] = [1, 2, 3];
// 使用数组泛型
let list: Array<number> = [1, 2, 3];
元组类型允许表示一个已知元素数量和类型的数组,如:
let x: [string, number];
x = ['hello', 10]; // OK
x = [10, 'hello']; // Error
特殊类型
any 表示允许赋值为任意类型,在编程阶段还不清楚类型的变量可以指定为 any 类型。
let notSure: any = 4;
notSure = 'maybe a string';
notSure = false; // okay, definitely a boolean
unknown 表示未知类型,与 any 一样,所有类型都可以分配给 unknown。但是 unknown 类型只能被赋值给 any 类型和 unknown 本身。
let value: unknown;
value = true; // OK
value = 42; // OK
value = 'Hello World'; // OK
let value1: unknown = value; // OK
let value2: any = value; // OK
let value3: boolean = value; // Error
let value4: number = value; // Error
let value5: string = value; // Error
void 表示没有任何类型,当一个函数没有返回值时,通常会见到其返回值类型是 void。声明一个 void 类型的变量没有什么大用,因为你只能为它赋予 undefined 和 null。
never 表示永不存在的值的类型。例如 never 类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型。
// 返回never的函数必须存在无法达到的终点
function error(message: string): never {
throw new Error(message);
}
// 推断的返回值类型为never
function fail() {
return error('Something failed');
}
// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {
while (true) {}
}