MST

星途 面试题库

面试题:深入理解TypeScript类型系统:类型推断与条件类型的复杂应用

编写一个TypeScript类型工具`MyPick`,类似于内置的`Pick`类型,但有以下增强功能:它接受三个类型参数,第一个是目标类型,第二个是要提取的属性名组成的联合类型,第三个是一个布尔值。当第三个参数为`true`时,提取的属性值必须是`NonNullable`类型;当为`false`时,按照普通`Pick`行为。请详细解释你的实现思路,并给出完整的TypeScript代码。
18.2万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 首先,我们要根据第三个布尔类型参数来决定如何处理提取的属性。
  2. 如果第三个参数为true,我们需要对提取的属性值应用NonNullable类型。
  3. 如果第三个参数为false,我们直接按照内置Pick类型的行为进行操作。
  4. 我们可以使用条件类型来根据布尔值进行不同的处理。

完整的TypeScript代码

type MyPick<T, K extends keyof T, B extends boolean> = B extends true
  ? {
      [P in K]: NonNullable<T[P]>;
    }
  : {
      [P in K]: T[P];
    };