首页 > 解决方案 > 如何在 Typescript 中使特定道具不可为空?

问题描述

我有一个类型:

type Item = {
  cost: number | null
  name: string
  date: string | null
  rating: number | null
}

TS 中有没有一种方法可以基于Item,date和, 创建类型rating NonNullable?我可以做这样的事情:

  type FullItem = Omit<Item, 'date' | 'rating'> & {
    date: NonNullable<Item['date']>
    rating: NonNullable<Item['rating']>
  }

但这似乎有点麻烦。

标签: typescript

解决方案


好的,我刚刚提出了解决方案,似乎:

type RequiredNotNull<T> = {
  [P in keyof T]: NonNullable<T[P]>
}

type Ensure<T, K extends keyof T> = T & RequiredNotNull<Pick<T, K>>

type Item = {
  cost: number | null
  name: string
  date: string | null
  rating: number | null
}

type FullItem = Ensure<Item, 'rating' | 'date'>

推荐阅读