第十四篇 手写原理代码 - typeScript 【 实现 required、returnTypes、Partial、readOnly 】

发布时间 2023-04-12 16:04:01作者: caix-1987
在 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