在 TypeScript 中实现 required、returnTypes、Partial、readOnly 等功能可以帮助开发者更加方便地处理数据类型,减少在代码中出现的错误,提高代码的可维护性和健壮性
1、实现 required
使可选属性变为必填属性
type MyRequired<T> = {
[P in keyof T]-?: T[P];
};
interface NameInfo {
a?: string;
b?: number;
c?: boolean;
}
const b: NameInfo = {}; // true
const a: MyRequired<NameInfo> = { a: "1", b: 2, c: false }; // true
const c: MyRequired<NameInfo> = {}; // Error
2、实现 returnTypes
获取函数的返回类型
type MyReturnType<T extends (...args: any) => any> = T extends (
...args: any
) => infer P
? P
: never;
type Foo = () => { a: string };
type A = MyReturnType<Foo>; // {a:string}
3、实现 Partial
和 Required 相反,把所有必须属性变为非必需属性
type Time = {
name: string;
sex: string;
age: number;
};
type MyPartial<T> = {
[K in keyof T]?: T[K];
};
const timeTe: Time = {}; // 报错
const timeTe2: MyPartial<Time> = {}; // 正确
4、实现 readOnly
将类型T中的所有属性都变成仅读的
type MyReadOnly<T> = {
readonly [M in keyof T]: T[M];
};
const read_2: MyReadOnly<ReadBook> = {
name: "caix-1987",
sex: "男",
};
read_2.name = "caix"; // Error