例えば、同じ値があっても、用途が違うために型が異なっている場合があったとします。

type Person = {
  name: string
  age: number
  job: string
}

type Questionnaire = {
  email: string
  job: boolean
  description: string
}

こちらの例では、Personオブジェクトのjobは string 型ですが、Questionnairejobは boolean 型になっています。

同じ値で異なる型を使い分けたい場合、inferを使います。

書き方は、コンディショナルタイプで値の後にinferと書いて、Uを書きます。

type Resume<T> = T extends { job: infer U } ? U : never

Tの型を使いたい場合、中のjobが string 型なので、Resumeの型は string 型になります。

もし、Tの型にjobがない場合は、never 型になります。

Personオブジェクトのjobを使ってみましょう。

const myJob: Resume<Person> = "営業"

確認すると、

image2

myJobが string 型になりました。

営業を false に変えてみると、

image3

エラーが発生し、『型 'boolean' を型 'string' に割り当てることはできません。』と指摘されました。

ブログ一覧