0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【TypeScript】in演算子を使った型による条件分岐の方法

Last updated at Posted at 2022-06-25

やりたかったこと

↓のような、型とメソッドが既存のソースにありましたが、このメソッドに対し、似てるけどちょっと違う型も引数に渡せるようにする必要がありました。(プロパティ名が異なる)
理由としては、型が違ってもほぼ同じ処理なので、わざわざ別々のメソッドを作るのも気が引けたためです。

interface IfX{
 propA: string;
 propB: string;
}

func(param: IfY) {
 // なんらかの処理
}

そのため、このような感じで型の追加と、引数の修正を行いました。

interface IfA{
 propA: string;
 propB: string;
}

interface IfB{
 propC: string;
 propD: string;
}

func(paramX: IfX | paramY: IfY) {
 // なんらかの処理
}

ただ、このメソッドは、プロパティに依存した処理を行なうので、このままでは使用することができませんでした。
そのため、型による条件分岐をする必要がありました。

方法

以前、たまたま見かけた下の記事のことを記憶していたので、見返してみましたが、型名用のプロパティを追加して、タグのようなものとして使用し、それにより条件分岐する方法でした。

しかしながら、今回の場合は、既に設計書があり、プロパティを追加することができないため、この方法は使用できませんでした。

で、調べた結果、in演算子でできそうということで、inを使って実装しました。

具体例

func(paramX: IfX | paramY: IfY) {
  if('propA' in paramX ) {
    // 型IfX用のなんらかの処理
  } 
  if('propC' in paramY) {
    // 型IfY用のなんらかの処理 
  }
}

'propA' in paramXの意味ですが、paramXの型がIfXで、propAというプロパティをもっていればtrue、もっていなかければfalseとboolean型で返します。これで型による条件分岐ができました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?