在结构化类型系统中,两个类型相等当且仅当它们的结构相同,而在名义类型系统中,两个类型相等当且仅当它们的名字一样。比如两个类(class),都含有一个名为num的整数变量作为属性,而且没有任何成员函数,则在结构化类型系统中,这两个类可以视为同一类型,但在名义类型系统中,这两个类名字不一样,是不同的类型。
一般认为结构化类型系统与名义类型系统相比,前者更加灵活,而后者则能够更好地保证类型安全。采用结构化类型系统的编程语言包括OCaml、Haskell、Elm等函数式编程语言。采用名义类型系统的编程语言包括C++、Java、Swift等面向对象的语言。另外还有一些编程语言采用混合类型系统,比如Flow语言将对象和函数视为结构化类型,而将类当作名义类型。