typescript 在type中如何过滤可选属性

例如

 type A = {
    name: string
    age?: number
    sex?: number
  }

  type B = FilterOptional<A> // => { name: string }

把所有可选的属性过滤掉,这个FilterOptional应该怎么写

阅读 5.3k
2 个回答
type FilterOptional<T extends {}> = Pick<T, { [K in keyof T]-?: undefined extends T[K] ? never : K }[keyof T]>
type B = FilterOptional<A> // => { name: string }
type FilterOptional<T extends object> = Pick<T, Exclude<{
    [K in keyof T]: T extends Record<K, T[K]>
    ? K
    : never
}[keyof T], undefined>>;
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进