Nominal typing is a type system where compatibility and equivalence of data types are determined by explicit declarations and names rather than their structure or content. This approach emphasizes the importance of the identity of types, often leading to stricter type checking and more explicit code contracts in programming languages.