Вы забыли Haxe. Мне потребовалось некоторое время, чтобы запустить ваши кейсы с Haxe, чтобы продемонстрировать, как это делать / как выглядят ошибки.
Haxe - это современный высокоуровневый язык программирования со строгой типизацией и быстрым оптимизирующим кросс-компилятором. С Haxe вы можете создавать кроссплатформенные приложения, ориентированные на JavaScript, C ++, C #, Java, Python, Lua, PHP, Flash, HashLink и NekoVM, и обеспечивает доступ к собственным возможностям каждой платформы.
Чтобы узнать больше о выводе типа Haxe, прочтите: https://haxe.org/manual/type-system-type-inference.html
Случай 1: вывод в локальной области
class Test { static function main() { var x = 2; if (Math.random() > 0.5) { x = "bla"; } } }
Ошибка:
Test.hx:5: characters 10-19 : String should be Int
Случай 2: вывод между функциями
class Test { static function main() { function doSomething(x) { js.Browser.console.log(x.foo); // <--- Error here } var s = {bar: 100}; doSomething(s); } }
Ошибка:
Test.hx:7: characters 20-21 : { bar : Int } should be { foo : Unknown<0> } Test.hx:7: characters 20-21 : { bar : Int } has no field foo Test.hx:7: characters 20-21 : For function argument 'x'
Случай 3: строгий режим
В Haxe нет разных типов строгих режимов, он всегда строгий.
Случай 4: Логический вывод по функциям, часть 2
import js.Browser.console; class Test { static function main() { inline function ohWaitOneMoreThing(x) { console.log(x.foo); // <--- Error here } inline function doSomethingElse(x) { console.log(x); ohWaitOneMoreThing(x); } inline function doSomething(x) { console.log(x); doSomethingElse(x); } var s = {bar: 100}; doSomething(s); } }
Ошибка:
Test.hx:17: characters 20-21 : { bar : Int } should be { foo : Unknown<0> } Test.hx:17: characters 20-21 : { bar : Int } has no field foo Test.hx:17: characters 20-21 : For function argument 'x'
Боковое примечание: функции должны быть объявлены в обратном порядке вызова, чтобы сделать их доступными для точки вызова ниже.
Случай 5: Количество «любых» типов в lodash
определениях библиотеки
Haxe: N / A (нет привязок для lodash afaik)
Выводы
🙏 Haxe стоит попробовать.
Для тех, кто не знаком с Haxe, он включает:
- Кросс-платформенная стандартная библиотека
- Классы, интерфейсы и наследование
- Абстрактные типы
- Анонимные типы
- Вывод типа
- Понимание массива
- Условная компиляция
- (Обобщенные) алгебраические типы данных
- Встроенные вызовы
- Итераторы
- Локальные функции и закрытия
- Метаданные
- Статические методы расширения
- Строчная интерполяция
- Приложение с частичной функцией
- Сопоставление с образцом
- Характеристики
- Параметры типа, ограничения, дисперсия
- Отражение
- Макросы AST
- Статический анализ
- Удаление мертвого кода