Scala has a static, strong, and Turing complete type system that can infer types. It supports object-oriented programming with named types like Dog and functional programming with parameterized types like List[Int]. New types can be defined through classes, traits, case classes, and type members. Types are more general than classes and include structural types. Variance controls subtype relationships for parameterized types. Type bounds and existential types provide additional type safety. Higher kinded types allow types to be parameterized over other types.