[TS-Study] 7. Union typeとIntersection type


1. Union type


1)概念


Union typeはタイプの中で「または」の概念とされている.いろいろなタイプの中で一つだけ満足していればいい時に使えます.anyタイプを使用しても同様の効果が得られますが、タイプ範囲が広すぎて避けるべきです.
タイプスクリプトを使用するOR演算子|は、a | bのように表される.
次の例は、unionItemという変数に対してstringまたは(OR)numberの2つのタイプの1つを割り当てることができることを意味する.
let unionItem: string | number;

2)メリット


タイプ推論による呼び出し方法


次のコードのようにanyタイプを使用すると、通常のJSコードを記述するようにタイプ推定は生成されません.したがって,string関連手法を用いても自動的には完成しない.
ですが、Union typeを使用すると、各タイプに対して条件文処理を行う過程で、適切なタイプを自動的に完了する方法がサポートされています.つまり、anyではなくUnion Typeを使用してこそ、タイプスクリプトの優位性を発揮することができます.
タイプスクリプトはjavascript構文typeofを理解し、条件文の範囲内でタイプ範囲を特定のタイプに縮小します.このように条件文でタイプ範囲を絞り込み,タイプエラーを防止することをType Guardと呼び,以降この概念を個別に議論する.

 

2. Intersection Type


1)概念


Intersection typeはタイプの「and(AND)」の概念です.いろいろなタイプが満足したいときに使えます.
タイプスクリプトを使用するAND演算子&は、a & bのように表されます.
次の例は、intersectionItemという変数に対して、stringおよび(AND)numberの両方のタイプが満たされるタイプを割り当てることができることを意味する.もちろん、このタイプは存在し得ず、intersectionItemのタイプは最終的にneverになるだろう.
let intersectionItem: string & number;

ご覧のように、複数の基本タイプを同時に満たすことはできません.交差タイプは主にオブジェクトタイプinterfaceまたはtype aliasとともに使用されます.次の章の例で説明します.
 

3.UnionとIntersectionの罠


前述のようにUnion typeは集合の概念と考えられ,Intersection typeは交差の概念と考えられるが,事実はそうではない.
 
次の例では、操作方法を示します.

パラメータsubjectはUnion typeである.Union typeが集約の概念である場合、subjectのpropertyは、nameおよびageおよびskillを示すべきである.ただし、タイプスクリプトの場合、subjectPersonまたはDeveloperである可能性があるため、参照エラーを防止するために、2つのタイプの汎用プログラムnameのみが提供される.
今回は逆にsubjectがIntersectionタイプになりました.前の例では、subjectPersonであり、Developerのタイプでもあります.つまり、2つのinterfaceを持つすべての番組のタイプです.したがって、タイプスクリプトは、interfacenameage、およびskillのパーセンテージを同時に提供する.
 
👨‍💻 勉強しながら書いた文章なので、間違いがあるかもしれません.いろいろなフィードバックを歓迎します.