基础类型
数字类型 number
数字类型 number 用来表示整数和浮点数
let x: number = 0b1010;
let y: number = 123;
字符串类型 string
字符串类型 string 用来表示字符串
let x: string = "rinvay";
let y: string = `你好👋,我是${x}`;
布尔类型 boolean
布尔类型 boolean 表示逻辑值:true 和 false。
let flag: boolean = true;
对象类型 object
object 类型包含了所有对象、数组和函数。
let x: object = { name: "rinvay" };
let y: object = [1, 2, 3];
let z: object = () => {};
类型 undefined 和 null
undefined 和 null 类型分别表示 undefined 和 null 值。
let x: undefined = undefined;
let y: null = null;
类型 symbol
类型 symbol 表示所有的 Symbol 值
let x: symbol = Symbol();
类型 bigint
类型 bigint 表示任意大的整数,和 number 类型不兼容。
let x: bigint = 123n;
let y: bigint = 123; // error 不能将类型“number”分配给类型“bigint”
任意类型 any
声明为 any 的变量可以赋予任意类型的值。
let x: any;
x = 123;
x = "rinvay";
类型 unknown
声明为 unknown 的变量可以赋予任意类型的值,这一点和 any 相同。 不同的是 声明为 unknown 的变量不能直接赋值给其他变量(除 any、unknown 类型)。
let x: unknown;
x = true;
x = "rinvay";
let y: number = x; // error 不能直接赋值给其他变量
类型 never
never 是其它类型(包括 null 和 undefined)的子类型,代表从不会出现的值。这意味着声明为 never 类型的变量只能被 never 类型所赋值。
let x: never;
let y: number;
let fn = () => {
throw new Error("exception");
};
x = 123; // error 不能将类型“number”分配给类型“never”
x = fn();
y = fn();
let error = (message: string): never => {
throw new Error(message);
};
联合类型
联合类型(Union Types)可以通过管道 | 将变量设置多种类型,赋值时可以根据设置的类型来赋值。
let x: string | number;
x = 123;
x = "rinvay";
x = true; // error 不能将类型“boolean”分配给类型“string | number”
交叉类型
交叉类型(Intersection Types)是一种可以组合多个类型的方式。它允许您将多个类型通过 & 合并为一个类型,其中每个类型都适用于该类型的属性或方法。
type TypeC = TypeA & TypeB;
示例
type Person = {
name: string;
age: number;
};
type Employee = {
company: string;
salary: number;
};
type PersonAndEmployee = Person & Employee;
const employee: PersonAndEmployee = {
name: "rinvay",
age: 18,
company: "beisen",
salary: 1000,000,
};