类型工具集合
该文档为类型工具集合提供了详细的说明。每个工具函数用于在 TypeScript 中处理和转换类型,提升开发效率。下面将介绍每个函数的用途,并通过示例展示其应用及预期结果。
UnwrapPromise
- 作用: 提取
Promise类型的返回值类型。 用于提取Promise类型中返回值的类型。
type Result = UnwrapPromise<Promise<string>>; // Result 类型为 string预期结果: Result 类型是 string,因为 Promise<string> 的返回值类型是 string。
Optional
- 作用: 将类型中的所有属性转换为可选类型。 用于使类型中的所有属性变为可选。
type Person = { name: string; age: number };
type OptionalPerson = Optional<Person>;
// 结果: { name?: string; age?: number }预期结果: OptionalPerson 类型是 { name?: string; age?: number },所有属性变成可选。
Required
- 作用: 将类型中的所有属性转换为必选。 用于将类型中的所有属性变为必选,适用于原本可能有可选属性的类型。
type Person = { name?: string; age?: number };
type RequiredPerson = Required<Person>;
// 结果: { name: string; age: number }预期结果: RequiredPerson 类型是 { name: string; age: number },所有属性变为必选。
Readonly
- 作用: 将类型中的所有属性变为只读。 用于将一个类型的所有属性设为只读。
type Person = { name: string; age: number };
type ReadonlyPerson = Readonly<Person>;
// 结果: { readonly name: string; readonly age: number }预期结果: ReadonlyPerson 类型是 { readonly name: string; readonly age: number },所有属性不可修改。
ReturnTypeOf
- 作用: 提取函数的返回值类型。 用于提取函数返回值的类型。
function getPerson() {
return { name: 'John', age: 30 };
}
type PersonType = ReturnTypeOf<typeof getPerson>;
// 结果: { name: string; age: number }预期结果: PersonType 类型是 { name: string; age: number },即 getPerson 函数的返回值类型。
ArrayElement
- 作用: 提取数组类型中的元素类型。 用于提取数组类型中单个元素的类型。
type Numbers = number[];
type NumberType = ArrayElement<Numbers>;
// 结果: number预期结果: NumberType 类型是 number,即 Numbers 数组中元素的类型。
Merge
- 作用: 合并两个类型,去除重复的属性。 用于合并两个类型,如果有重复属性,第二个类型会覆盖第一个类型。
type A = { name: string };
type B = { age: number };
type AB = Merge<A, B>;
// 结果: { name: string; age: number }预期结果: AB 类型是 { name: string; age: number },两个类型合并。
UnionToIntersection
- 作用: 将联合类型转换为交叉类型。 用于将联合类型转换为交叉类型,这在某些需要从多个类型中组合属性的场景中很有用。
type A = { name: string };
type B = { age: number };
type C = UnionToIntersection<A | B>;
// 结果: { name: string; age: number }预期结果: C 类型是 { name: string; age: number },通过将联合类型 A | B 转换为交叉类型。
NonNullableProperties
- 作用: 提取对象类型中非
null或undefined的属性类型。
type MyType = { a: number; b: string | null; c: undefined; d: boolean };
type NonNullableType = NonNullableProperties<MyType>;
// 结果: { a: number; d: boolean }预期结果: NonNullableProperties 去除了 null 和 undefined 的属性,从而返回一个新类型。
Pick
- 作用: 从类型
T中选取某些属性K,并返回一个新类型。
type MyType = { a: number; b: string; c: boolean };
type PickedType = Pick<MyType, 'a' | 'b'>;
// 结果: { a: number; b: string }预期结果: 通过 Pick 工具选择了类型 MyType 中的 a 和 b 属性,并创建了新类型 PickedType。
Exclude
- 作用: 从类型
T中排除掉类型U,返回一个新的类型。
type MyType = string | number | boolean;
type ExcludedType = Exclude<MyType, number>;
// 结果: string | boolean预期结果: Exclude 排除了类型 number,结果为 string | boolean。
Parameters
- 作用: 提取函数
T的参数类型,并返回一个元组类型。
type MyFunction = (a: number, b: string) => void;
type Params = Parameters<MyFunction>;
// 结果: [number, string]预期结果: Parameters 提取了 MyFunction 的参数类型 [number, string]。
MethodsOf
- 作用: 提取类型
T中所有方法的名称。
type MyType = { a: number; b: string; c: () => void };
type MethodNames = MethodsOf<MyType>;
// 结果: "c"预期结果: MethodsOf 提取了 MyType 中的所有方法名称,并返回了 "c",因为 c 是唯一的方法。
KeysOf
- 作用: 提取类型
T中所有键名,并返回一个联合类型。
type MyType = { a: number; b: string };
type Keys = KeysOf<MyType>;
// 结果: "a" | "b"预期结果: KeysOf 返回了类型 MyType 中的所有键名联合类型,结果为 "a" | "b"。
ValuesOf
- 作用: 提取类型
T中所有的值类型,并返回一个联合类型。
type MyType = { a: number; b: string };
type Values = ValuesOf<MyType>;
// 结果: number | string预期结果: ValuesOf 返回了类型 MyType 中的所有值类型的联合类型,结果为 number | string。
Record
- 作用: 创建一个具有指定键
K和指定值类型T的对象类型。
type MyRecord = Record<'a' | 'b', number>;
// 结果: { a: number; b: number }预期结果: Record 创建了一个键为 'a' | 'b',值为 number 的对象类型。
UnionToTuple
- 作用: 将联合类型转换为元组类型。
type MyUnion = 'a' | 'b' | 'c';
type MyTuple = UnionToTuple<MyUnion>;
// 结果: ['a', 'b', 'c']预期结果: UnionToTuple 将 MyUnion 联合类型转换成了一个元组类型,['a', 'b', 'c']。
PublicProperties
- 作用: 提取类中的公共属性。
class MyClass {
private privateProp: string;
public publicProp: number;
}
type PublicProps = PublicProperties<MyClass>;
// 结果: { publicProp: number }预期结果: PublicProperties 提取了类 MyClass 中的公共属性 publicProp。
NonNullable
- 作用: 移除
null和undefined类型。
type MyType = string | null | undefined;
type NonNullableType = NonNullable<MyType>;
// 结果: string预期结果: NonNullable 将 MyType 中的 null 和 undefined 移除,结果为 string。
StringLiteral
- 作用: 创建一个字符串字面量类型。
type MyLiteral = StringLiteral<'a'>;
// 结果: 'a'预期结果: StringLiteral 创建了一个类型 'a',表示具体的字符串字面量类型。
TypedEventEmitter
- 作用: 创建一个类型安全的事件发射器类型,确保事件和数据类型一致。
interface Events {
message: string;
error: Error;
}
const emitter: TypedEventEmitter<Events> = {
on(event, listener) {
// 事件监听器实现
},
emit(event, data) {
// 事件触发实现
}
};
emitter.emit('message', 'Hello World'); // 正常
emitter.emit('error', new Error('Oops')); // 正常
emitter.emit('message', new Error('Oops')); // 错误: 参数类型不匹配预期结果: TypedEventEmitter 确保事件名与传递的数据类型匹配,提供类型安全的事件发射器接口。
