# 2759-实现RequiredByKeys

# 题目描述

实现一个通用的RequiredByKeys<T, K>,它接收两个类型参数TK

K指定应设为必选的T的属性集。当没有提供K时,它就和普通的Required<T>一样使所有的属性成为必选的。

例如:

interface User {
  name?: string;
  age?: number;
  address?: string;
}

type UserRequiredName = RequiredByKeys<User, 'name'>; // { name: string; age?: number; address?: string }

# 分析

这题和上一题一样,只不过可选变成了非可选,只需要参照官网 修饰符一节 (opens new window),查看不同的修饰符增加方式即可。

# 题解

type Merge<T> = {
  [P in keyof T]: T[P];
};
type RequiredByKeys<T, K extends keyof T = keyof T> = Merge<
  {
    [P in K]-?: T[P];
  } & {
    [P in keyof T as P extends K ? never : P]: T[P];
  }
>;

这里,省略部分属性,也可以通过 Pick<T, Exclude<T, K>> 实现,反正就一行代码,自己实现来的又快又简单就没必要使用库工具了。

# 知识点

  1. 实现 PartialByKeys
Last Updated: 2023/5/16 06:00:28