Теоретически, мы можем научить компилятор тайпскрипта генерить нам рантайм проверки для определенных типов, и не тащить метаданные всех типов в рантайм — это было бы даже круче. но команда тайпскрипта следует своей философии не влиять на рантайм, и никогда на это не пойдет.
А еще есть compile time рефлексия или процедурные макросы, которые могут преобразовывать AST на этапе компиляции.
Это часто используется в языках типа Хаскеля и Раста, туда же можно записать лиспомакросы.
Вообще, мне кажется, что тут просто все можно свести в таблицу и по ней строить классификации языков.
А еще есть compile time рефлексия или процедурные макросы, которые могут преобразовывать AST на этапе компиляции.
Это часто используется в языках типа Хаскеля и Раста, туда же можно записать лиспомакросы.
Вообще, мне кажется, что тут просто все можно свести в таблицу и по ней строить классификации языков.
Мне ещё регулярно (в чужом коде) встречается Vinyl. Но конечно это всё полимеры...