Вывод типа является функцией некоторых статически типизированных языков. Это делается компилятором для назначения типов сущностям, которые в противном случае не имеют каких-либо аннотаций типов. Компилятор фактически просто «заполняет» информацию статического типа от имени программиста.
Вывод типов имеет тенденцию работать хуже в языках со многими неявными приведениями и неоднозначностями, поэтому большинство языков с выводом типов являются функциональными языками с небольшим количеством способов приведения, перегрузки и т. Д.
Вывод типа является частью спецификации языка, например, спецификация F # подробно описывает алгоритм и правила вывода типа, поскольку это эффективно определяет «что такое легальная программа».
Хотя некоторые (большинство?) Языки поддерживают некоторые ограниченные формы вывода типов (например, «var» в C #), по большей части люди используют «вывод типов» для обозначения языков, в которых выводится подавляющее большинство типов, а не явный (например, в F # сигнатуры функций и методов, в дополнение к локальным переменным, обычно выводятся; в отличие от C #, где 'var' допускает вывод локальных переменных, но объявления методов требуют полной информации о типе).