2020年4月19日日曜日

Typescriptのinterfaceなどの型から特定の値を除外する方法


Typescriptとはjavascript実行環境で動く型付きの言語です。
interface、class, typeなどの宣言で型を定義できます。
 一部の値を除外して型を定義する方法を把握したので、備忘録を兼ねて記事を残します。

typescriptでこのような一部の値以外は同じ型を定義する場合いくつかの記述方法があります。
interface Article {
  title: string
  body: string
  authorId: number 
}

interface ArticleWithoutAuthorId {
  title: string
  body: string
}

上記の書き方だと同じ内容を複数のinterfaceで記述しているため、内容が変わった時に片方を変更し忘れて不具合を発生させてしまうかもしれません。

冗長な記述をなくす書き方のひとつは&を使う方法です。
interface ArticleWithoutAuthorId {
  title: string
  body: string
}

type Article = ArticleWithoutAuthorId & {
  authorId: number 
}

上記のように、保持する値が少ない方をtypeの定義で利用して&で繋ぐことで期待する型になります。

他の書き方としてはOmitを使う方法です。
interface Article {
  title: string
  body: string
  authorId: number 
}

type ArticleWithoutAuthorId = Omit<Article, "authorId">

上記のように Omit<除外対象の型, 除外したい値の名前> と記述することで、期待するように型を定義できました。

Utirily Typesとして便利機能が紹介されているので「こんな書き方が知りたい」と思った時は覗いてみると良いかもしれません。

参考
Exclude property from type - Stack Overflow
TypeScript: Handbook - Utility Types

0 件のコメント :