TypeScript内置工具类型

TypeScript 提供了许多内置的工具类型(Utility Types),这些工具类型可以用来简化类型操作,帮助开发者更灵活地处理类型。以下是一些常用的工具类型:

TypeScript 提供了许多内置的工具类型(Utility Types),这些工具类型可以用来简化类型操作,帮助开发者更灵活地处理类型。以下是一些常用的工具类型:

# 1. Partial<T>

  • 定义:将类型 T 的所有属性都变为可选的。

  • 用途:常用于函数参数、配置对象或部分更新场景。

  • 示例

    1
    2
    3
    4
    5
    type Person = {
    name: string;
    age: number;
    };
    type PartialPerson = Partial<Person>;

    等价于:

    1
    2
    3
    4
    type PartialPerson = {
    name?: string;
    age?: number;
    }

# 2. Readonly<T>

  • 定义:将类型 T 的所有属性都变为只读的。

  • 用途:用于防止对象的属性被修改,确保数据的不可变性。

  • 示例

    1
    2
    3
    4
    5
    type Person = {
    name: string;
    age: number;
    };
    type ReadonlyPerson = Readonly<Person>;

    等价于:

    1
    2
    3
    4
    type ReadonlyPerson = {
    readonly name: string;
    readonly age: number;
    }

# 3. Omit<T, K>

  • 定义:从类型 T 中排除掉属性 K ,返回一个新类型。

  • 用途:用于创建一个不包含某些属性的新类型。

  • 示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    type Person = {
    name: string;
    age: number;
    address: string;
    };
    type PersonWithoutAddress = Omit<Person, "address">;

    // 等价于:

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

# 4. Pick<T, K>

  • 定义:从类型 T 中选择属性 K ,返回一个新类型。

  • 用途:用于提取类型中的部分属性。

  • 示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    type Person = {
    name: string;
    age: number;
    address: string;
    };

    type PersonNameAndAge = Pick<Person, "name" | "age">;

    // 等价于:

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

# 5. Exclude<T, U>

  • 定义:从类型 T 中排除掉类型 U 的部分。

  • 用途:用于从联合类型中排除某些类型。

  • 示例

    1
    2
    3
    4
    5
    6
    type StringOrNumber = string | number;
    type StringOnly = Exclude<StringOrNumber, number>;

    // 等价于:

    type StringOnly = string;

# 6. Extract<T, U>

  • 定义:从类型 T 中提取出类型 U 的部分。

  • 用途:用于从联合类型中提取某些类型。

  • 示例

    1
    2
    3
    4
    5
    6
    type StringOrNumber = string | number;
    type NumberOnly = Extract<StringOrNumber, number>;

    // 等价于:

    type NumberOnly = number;

# 7. NonNullable<T>

  • 定义:从类型 T 中排除 nullundefined

  • 用途:用于确保类型中不包含 nullundefined

  • 示例

    1
    2
    3
    4
    5
    6
    type NullableString = string | null | undefined;
    type NonNullableString = NonNullable<NullableString>;

    // 等价于:

    type NonNullableString = string;

# 8. ReturnType<T>

  • 定义:获取函数类型 T 的返回值类型。

  • 用途:用于从函数类型中提取返回值类型。

  • 示例

    1
    2
    3
    4
    5
    6
    type GetPerson = () => { name: string; age: number };
    type PersonType = ReturnType<GetPerson>;

    // 等价于:

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

# 9. Parameters<T>

  • 定义:获取函数类型 T 的参数类型。

  • 用途:用于从函数类型中提取参数类型。

  • 示例

    1
    2
    3
    4
    5
    6
    type AddFunction = (a: number, b: number) => number;
    type AddFunctionParameters = Parameters<AddFunction>;

    // 等价于:

    type AddFunctionParameters = [number, number];

# 10. InstanceType<T>

  • 定义:获取构造函数类型 T 的实例类型。

  • 用途:用于从构造函数类型中提取实例类型。

  • 示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Person {
    constructor(public name: string, public age: number) {}
    }

    type PersonInstance = InstanceType<typeof Person>;
    // 等价于:
    // type PersonInstance = {
    // name: string;
    // age: number;
    // }

# 11. Record<K, T>

  • 定义:创建一个新类型,其键为 K ,值为 T

  • 用途:用于创建一个对象类型,其中键和值的类型是固定的。

  • 示例

    1
    2
    3
    4
    5
    6
    7
    type Status = "active" | "inactive";
    type StatusMap = Record<Status, number>;
    // 等价于:
    // type StatusMap = {
    // active: number;
    // inactive: number;
    // }

# 12. Awaited<T>

  • 定义:获取 Promise 类型 T 的最终值类型。

  • 用途:用于从 Promise 类型中提取最终值类型。

  • 示例

    1
    2
    3
    4
    type PromiseString = Promise<string>;
    type AwaitedString = Awaited<PromiseString>;
    // 等价于:
    // type AwaitedString = string;

# 总结

这些工具类型在 TypeScript 中非常强大,可以帮助开发者更灵活地操作类型,减少重复代码,提高代码的可维护性和可读性。根据具体的使用场景,选择合适的工具类型可以极大地提升开发效率。