Inferencja typów – mechanizm w językach statycznie typowanych, w którym kompilator określa typ danych na podstawie informacji dostępnych w czasie kompilacji, np. typów zadeklarowanych wcześniej lub określania typów na podstawie wartości już znanych zmiennych. Przykładem języka programowania, który wykorzystuje inferencję typów jest TypeScript.
Przykład Dla przykładu w wyjątkowo niezłożonym języku, kod został już przetworzony w drzewo składniowe z jednoargumentowymi (rozwiniętymi) funkcjami (przykładowy kod w Ocamlu).
Nasz język ma tylko dwie konstrukcje – atomy i aplikacje funkcji. Podobnie typy dzielą się na atomowe i funkcyjne:
type utype = Basic of string | Fun of utype * utype;;
type expr = Atom of utype | Fapp of expr * expr;;
Kompilator musi sprawdzić trzy wyrażenia: (+), (+ 2) i ((+ 2) 2), oblicza więc typy atomów: (int->int->int), ((int->int->int) int), (((int->int->int) int) int) i podaje je do naszego inferatora:
let plus = Atom (Fun (Basic "int", Fun (Basic "int", Basic "int")));; let two_plus = Fapp (plus, Atom (Basic "int"));;
let two_plus_two = Fapp (two_plus, Atom (Basic "int"));;