Στην επιστήμη των υπολογιστών ένα ονομαστικό σύστημα τύπων (Αγγλικά: Nominal type system) είναι μια βασική ομάδα του συστήματος τύπων όπου η ισότητα και η συμβατότητα μεταξύ τύπων δεδομένων καθορίζεται με τις ρητές δηλώσεις κατά τον ορισμό των ονομάτων των τύπων. Δύο τύποι είναι ισοδύναμοι (ισοδυναμία ονόματος / στα αγγλικά: name equivalence) εάν έχουν το ίδιο όνομα τύπου στο ίδιο πλαίσιο/συμφραζόμενα. Δύο τύποι που έχουν την ίδια δομή αλλά διαφορετικό όνομα τύπου θεωρούνται διαφορετικοί τύποι. Τα συστήματα τύπων χρησιμοποιούνται για να καθοριστούν αν δύο τύποι είναι ισοδύναμοι ή αν ένας τύπος είναι υποτύπος (στα αγγλικά: subtype) από κάποιον άλλον. Σε αντίθεση όταν έχουμε δομημένα συστήματα τύπων, δύο τύποι είναι ισοδύναμοι εάν έχουν την ίδια δομή (ονομάζεται ισοδυναμία δομής / στα αγγλικά: structural equivalence) δεν χρειάζεται να έχουμε ρητή δήλωση ίδιου ονόματος τύπου. [1]
Στο παρακάτω παράδειγμα ορίζουμε την δομή a1 και την δομή b1 σε γλώσσα τύπου C [2]:
a1
b1
struct { int x; int y; } a; struct { int x; int y; } b;
Ο ορισμός a := b; είναι αποδεκτός (δηλαδή σωστός) σε μια γλώσσα προγραμματισμού με δομημένο σύστημα τύπων ενώ δεν είναι αποδεκτός (δεν είναι σωστός) σε μια γλώσσα προγραμματισμού με ονομαστικό σύστημα τύπων. Για παράδειγμα η γλώσσα προγραμματισμού Pascal χρησιμοποιεί καθαρά ονομαστικό σύστημα τύπων:
a := b;
a : array[1..10] of Integer; b : array[1..10] of Integer; a := b; (* αυτό δεν είναι αποδεκτό! *)
Έτσι η έκφραση x := y δεν είναι αποδεκτή παρόλο που ο τύπος a και b έχουν ακριβώς την ίδια δομή.
x := y