首页 > 解决方案 > 是否可以使用类型映射和条件类型只需要对象中的某些指定键?

问题描述

有来自第 3 方的类型:

interface UpdateRequest {
  data?: ValueRange[];
  options?: Options
}

我想用这个签名创建一个方法:

update(params: RequiredOnly<UpdateRequest, 'data'>) {
  //...
}

RequiredOnly 类型实用程序将只要求关键“数据”,而不是像Required 那样同时要求“数据”和“选项”。

是否可以创建RequiredOnly 类型的实用程序?

我被困在这里:

type RequiredOnly<T, a extends keyof T> = { 
  [K in keyof T extends a ? a : never ]-?: T[K] 
} 

标签: angulartypescript

解决方案


您可以使用Pickand Requiredand intersect back 与原始类型来取回其他可选属性

type RequireSome<T, K extends keyof T> = Required< Pick<T, K>> & T;

推荐阅读