1. ホーム
  2. typescript

[解決済み] TypeScriptで単一のプロパティをオプションにする

2022-12-16 07:34:27

質問

TypeScriptでは、2.2...

Person型があるとします。

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

そして、Personを返すが、ニックネームを必要としない関数を作りたいと思います。

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