JavaやPHPの型システムはNominal Typing(公称型)と呼ばれ、クラス名の一致で型の互換性を識別する。一方のTypeScriptはStructural Typing(構造型)と呼ばれ、構造さえ同じなら互換性ありと識別する。 例えば、次のUserクラスとProductクラスは共通してname属性を持っており、同じ構造になっている。つまり、相互に互換性がある。従ってTypeScriptではコンパイルエラーにならない。 class User { name: string } class Product { name: string } let user: User = new Product() // コンパイルエラーにならない let product: Product = new User() // コンパイルエラーにならない TypeScriptでNominal Typingを