generated at
Nominal Typing, Structural Typing
2019/01/21

なにこれ
型システムの型検査の手法みたいなもの

Nominal Typing
名目上の型。名前的型。
クラスなどの型を内部構造を見て判断するのではなく、型についた名前で識別する

Structual Typing
構造的型。
クラスなどの型を内部構造を見て判断する。
名前が違っても同じ構造の型はコンパイルエラーにならない。

何か問題でも?
名前しか見てくれないと、同じStringを持つクラスではあるが、エンコード済 / notで違うプロパティを持たせたい時とかに、型検査でエンコード済かをチェックできないので困る

解決法
実装内部では使われない型パラメータを用いて、コンパイラレベルで値を区別するのが 幽霊型(Phantom Type)
TypeScriptでやらせようとするにはそこそこたいへん(自分で実装する必要ある)

参考