你有用过哪些ts的高级类型?

50 阅读2分钟

"```markdown

TypeScript 高级类型

TypeScript 提供了一系列强大的高级类型,帮助开发者更好地控制类型和约束。以下是一些常用的高级类型及其应用。

1. 联合类型 (Union Types)

联合类型允许一个变量可以是多种类型之一。可以使用 | 符号来定义。

function formatValue(value: string | number) {
    return value.toString();
}

2. 交叉类型 (Intersection Types)

交叉类型将多个类型合并为一个类型,使用 & 符号。

interface User {
    name: string;
}

interface Admin {
    role: string;
}

type AdminUser = User & Admin;

const admin: AdminUser = {
    name: \"Alice\",
    role: \"Administrator\"
};

3. 类型别名 (Type Aliases)

类型别名允许你为复杂类型创建简短的名称。

type Point = {
    x: number;
    y: number;
};

const point: Point = { x: 10, y: 20 };

4. 字面量类型 (Literal Types)

字面量类型可以限制变量的值为特定的字面量。

type Direction = \"left\" | \"right\";

function move(direction: Direction) {
    console.log(`Moving ${direction}`);
}

5. 映射类型 (Mapped Types)

映射类型通过遍历已有类型的属性来创建新类型。

type Person = {
    name: string;
    age: number;
};

type ReadOnly<T> = {
    readonly [K in keyof T]: T[K];
};

type ReadOnlyPerson = ReadOnly<Person>;

6. 条件类型 (Conditional Types)

条件类型根据某个类型的条件来选择不同的类型。

type IsString<T> = T extends string ? \"Yes\" : \"No\";

type Test1 = IsString<string>; // \"Yes\"
type Test2 = IsString<number>; // \"No\"

7. 索引类型 (Index Types)

索引类型允许使用对象的键来获取对应的值类型。

type Person = {
    name: string;
    age: number;
};

type PersonKeys = keyof Person; // \"name\" | \"age\"

8. ReturnTypeParameters 类型

ReturnType 用于获取函数返回值的类型,Parameters 用于获取函数参数的类型。

function add(a: number, b: number): number {
    return a + b;
}

type AddReturnType = ReturnType<typeof add>; // number
type AddParameters = Parameters<typeof add>; // [number, number]

9. PartialRequired 类型

Partial 将所有属性设为可选,Required 将所有属性设为必填。

interface User {
    name: string;
    age?: number;
}

type PartialUser = Partial<User>; // { name?: string; age?: number; }
type RequiredUser = Required<User>; // { name: string; age: number; }

10. PickOmit 类型

Pick 用于从一个类型中选择部分属性,Omit 用于从一个类型中排除部分属性。

interface User {
    name: string;
    age: number;
    email: string;
}

type UserNameAndEmail = Pick<User, \"name\" | \"email\">;
type UserWithoutAge = Omit<User, \"age\">;