Make a single property optional in TypeScript Ask Question

Make a single property optional in TypeScript Ask Question

In TypeScript, 2.2...

Let's say I have a Person type:

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

And I'd like to create a function that returns a Person, but doesn't require a nickname:

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

の型はどうあるべきでしょうか? がオプションであることinputを除いて と同一の型を動的に指定する方法を探しています( )。 これまでに私が思いついた最も近いものは次のとおりです。Personnicknamenickname?: string | undefined

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

しかし、それは私が探しているものではありません。なぜなら、すべてのタイプを指定しなければならないからです。必須オプションのものの代わりに。

ベストアンサー1

一部のキーのみを部分的に変更するなど、このような操作も行えます。

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'>

おすすめ記事