TypeScript 数据类型
类型是 TypeScript 的核心。它描述了变量、函数参数和函数返回值可以拥有的值的种类。通过指定类型,我们可以让 TypeScript 编译器帮助我们检查代码的正确性。
TypeScript 支持 JavaScript 的所有基本数据类型,并在此基础上增加了一些新的类型。
基本类型 (Primitive Types)
1. 布尔值 (Boolean)
最基本的数据类型,只有两个值:true 和 false。
let isDone: boolean = false;2. 数字 (Number)
和 JavaScript 一样,TypeScript 中所有的数字都是浮点数。这些数字的类型是 number。支持十进制、十六进制、二进制和八进制字面量。
let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;3. 字符串 (String)
用于表示文本数据。使用 string 表示。可以使用双引号 (") 或单引号 (') 来包围字符串。
let color: string = "blue";
color = 'red';还支持模板字符串(使用反引号 `),可以嵌入表达式和跨越多行。
let fullName: string = `Bob Bobbington`;
let age: number = 37;
let sentence: string = `Hello, my name is ${fullName}.
I'll be ${age + 1} years old next month.`;复合类型 (Composite Types)
4. 数组 (Array)
TypeScript 允许你使用两种方式来定义数组。
第一种,在元素类型后面接上 [],表示由此类型元素组成的一个数组:
let list: number[] = [1, 2, 3];第二种,使用数组泛型,Array<元素类型>:
let list: Array<number> = [1, 2, 3];5. 元组 (Tuple)
元组类型允许你表示一个已知元素数量和类型的数组,各元素的类型不必相同。
// 声明一个元组类型
let x: [string, number];
// 初始化
x = ['hello', 10]; // OK
// x = [10, 'hello']; // Error特殊类型
6. Any
有时候,我们不希望类型检查器对某个值进行检查,而是想让它直接通过编译阶段的检查。这时我们可以使用 any 类型来标记这些变量。any 类型可以是任何类型的值。
let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // okay, definitely a boolean使用 any 会失去 TypeScript 带来的大部分优势,因此应谨慎使用。
7. Void
void 类型与 any 类型相反,它表示没有任何类型。当一个函数没有返回值时,你通常会见到其返回值类型是 void。
function warnUser(): void {
console.log("This is my warning message");
}8. Null 和 Undefined
在 TypeScript 中,null 和 undefined 各有自己的类型,分别叫做 null 和 undefined。默认情况下,它们是所有类型的子类型,意味着你可以把 null 和 undefined 赋值给 number 类型的变量。
let u: undefined = undefined;
let n: null = null;当你在 tsconfig.json 中启用了 "strictNullChecks": true 配置时,null 和 undefined 只能赋值给 void 和它们各自的类型。
9. Never
never 类型表示的是那些永不存在的值的类型。例如,never 类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型。
// 返回never的函数必须存在无法达到的终点
function error(message: string): never {
throw new Error(message);
}
function infiniteLoop(): never {
while (true) {}
}10. Object
object 表示非原始类型,也就是除 number、string、boolean、symbol、null 或 undefined 之外的类型。使用 object 类型,你可以更好地表示像 Object.create 这样的 API。
declare function create(o: object | null): void;
create({ prop: 0 }); // OK
create(null); // OK
// create(42); // Error
// create("string"); // Error