typescript - 在 TypeScript 中使单个属性可选

标签 typescript

在 TypeScript 中,2.2...

假设我有一个 Person 类型:

interface Person {
  name: string;
  hometown: string;
  nickname: string;
}

我想创建一个函数来返回一个人,但不需要昵称:

function makePerson(input: ???): Person {
  return {...input, nickname: input.nickname || input.name};
}

input 的类型应该是什么?我正在寻找一种动态方法来指定与 Person 相同的类型,除了 nickname 是可选的(nickname?: string | undefined ).到目前为止我发现的最接近的是:

type MakePersonInput = Partial<Person> & {
  name: string;
  hometown: string;
}

但这并不是我想要的,因为我必须指定所有必需的类型,而不是可选的类型。

最佳答案

您也可以这样做,仅部分键。

type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>
type PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>

interface Person {
  name: string;
  hometown: string;
  nickname: string;
}

type MakePersonInput = PartialBy<Person, 'nickname'>

关于typescript - 在 TypeScript 中使单个属性可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43159887/

相关文章:

angular - 数字太小无法计算

javascript - 如何向 ng.Iscope 添加属性?

typescript 枚举通用映射

javascript - 在 Ionic 2 应用程序中显示 Youtube

typescript - Typescript 中 typeof Array[number] 的含义是什么?

reactjs - React,Typescript - 找不到模块...或其相应的类型声明

angular - 我们需要取消订阅 Angular 中的 http 调用吗?

javascript - TypeScript 文件未加载或其他问题

javascript - 如何使用 React 和 Typescript 处理 div 上的点击事件

git - 如果检测到 Typescript 错误,则阻止 git commit