Typ – opis rodzaju, struktury i zakresu wartości, jakie może przyjmować dany literał, zmienna, stała, argument, wynik funkcji lub wartość.

Przykładowe typy występujące w wielu językach programowania:
Część języków programowania stosuje kontrolę typów jako sposób zabezpieczania kodu przed nieprawidłowym działaniem oraz poprawienia jego czytelności (dla języków programowania, w których nie jest konieczna jawna deklaracja typów zmiennych). Kontrola typów może mieć postać typowania dynamicznego lub typowania statycznego.
W zależności od tego poziomu na jakim kontrola typów jest dokonywana wyróżnia się języki z typowaniem silnym (takie jak Pascal czy Ada) oraz słabym (np. C, Fortran).
int* wskaznik = malloc (sizeof(int));
Próba kompilacji powyższego kodu spowoduje błąd, gdyż funkcja malloc zwraca typ wskaźnikowy void *, natomiast zmienna wskaznik posiada typ int *.
Kod podany za przykład jest jednocześnie prawidłowym kodem w słabo typowanym języku C, w przypadku którego kompilacja przebiegnie bez błędów (w języku C typ void * jest automatycznie (i niejawnie) konwertowany na dowolny inny typ wskaźnikowy, np. char * czy int *).
function test(MojaKlasa $zmienna) {
/* Kod funkcji */
}
Zastosowanie kontroli typu argumentu funkcji test spowoduje wystąpienie błędu w przypadku, jeśli argument $zmienna nie będzie instancją klasy MojaKlasa.