欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > typescript内置工具泛型全解析

typescript内置工具泛型全解析

2025/2/12 19:37:12 来源:https://blog.csdn.net/LQS5858/article/details/145575341  浏览:    关键词:typescript内置工具泛型全解析

TypeScript 内置了一些强大的泛型工具(Utility Types),这些工具可以帮助开发者更方便地操作和转换类型。以下是一些常用的内置泛型工具及其说明:

1. Partial<T>

将类型 T 中的所有属性变为可选。

interface Person {name: string;age: number;
}type PartialPerson = Partial<Person>;
// 结果:
// type PartialPerson = {
//   name?: string;
//   age?: number;
// }

2. Required<T>

将类型 T 中的所有可选属性变为必选。

interface Person {name: string;age?: number;
}type RequiredPerson = Required<Person>;
// 结果:
// type RequiredPerson = {
//   name: string;
//   age: number;
// }

3. Readonly<T>

将类型 T 中的所有属性变为只读。

interface Person {name: string;age: number;
}type ReadonlyPerson = Readonly<Person>;
// 结果:
// type ReadonlyPerson = {
//   readonly name: string;
//   readonly age: number;
// }

4. Record<K, T>

构造一个对象类型,其键为 K 类型,值为 T 类型。

type StringToNumber = Record<string, number>;
// 结果:
// type StringToNumber = {
//   [key: string]: number;
// }

5. Pick<T, K>

从类型 T 中选择指定的属性 K,构造一个新类型。

interface Person {name: string;age: number;address: string;
}type PersonNameAge = Pick<Person, 'name' | 'age'>;
// 结果:
// type PersonNameAge = {
//   name: string;
//   age: number;
// }

6. Omit<T, K>

从类型 T 中排除指定的属性 K,构造一个新类型。

interface Person {name: string;age: number;address: string;
}type PersonWithoutAddress = Omit<Person, 'address'>;
// 结果:
// type PersonWithoutAddress = {
//   name: string;
//   age: number;
// }

7. Exclude<T, U>

从类型 T 中排除所有属于类型 U 的属性。

type T = Exclude<'a' | 'b' | 'c', 'a'>;
// 结果:
// type T = 'b' | 'c';

8. Extract<T, U>

从类型 T 中提取所有属于类型 U 的属性。

type T = Extract<'a' | 'b' | 'c', 'a' | 'f'>;
// 结果:
// type T = 'a';

9. NonNullable<T>

排除类型 T 中的 nullundefined

type T = NonNullable<string | null | undefined>;
// 结果:
// type T = string;

10. ReturnType<T>

获取函数类型 T 的返回值类型。

function foo(): number {return 42;
}type FooReturnType = ReturnType<typeof foo>;
// 结果:
// type FooReturnType = number;

11. InstanceType<T>

获取构造函数类型 T 的实例类型。

class MyClass {prop: string;
}type MyClassInstance = InstanceType<typeof MyClass>;
// 结果:
// type MyClassInstance = MyClass;

12. ThisType<T>

用于指定上下文的 this 类型。

interface MyObject {name: string;greet(this: MyObject): void;
}const obj: MyObject = {name: 'Alice',greet() {console.log(`Hello, ${this.name}`);},
};

13. Pick<T, K>Omit<T, K> 的组合使用

可以结合使用 PickOmit 来创建更复杂的类型。

interface Person {name: string;age: number;address: string;phone: string;
}type PersonBasicInfo = Pick<Person, 'name' | 'age'>;
type PersonWithoutPhone = Omit<Person, 'phone'>;

14. Mapped Types

TypeScript 还支持通过映射类型(Mapped Types)来动态创建新类型。

type ReadonlyIf<T, K extends keyof T> = {[P in keyof T]: P extends K ? Readonly<T[P]> : T[P];
};interface Person {name: string;age: number;
}type ReadonlyNamePerson = ReadonlyIf<Person, 'name'>;
// 结果:
// type ReadonlyNamePerson = {
//   readonly name: string;
//   age: number;
// }

总结

TypeScript 的内置泛型工具极大地增强了类型系统的表达能力,使得类型定义更加灵活和精确。掌握这些工具可以帮助开发者编写更健壮、可维护的代码。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com