Я хочу отключить вывод типов для переменных в Typescript, но не могу найти способ сделать это.
Причина, по которой я хочу это сделать, в основном из-за перехода к обещаниям.
Иногда у меня есть код, подобный этому:
myFunction() : string {
....
return "some string";
}
const x = myFunction();
if(x != undefined){
do_something_important;
}
, и он работает нормально, x получает строку типа, и проверка типа работает, и все идет хорошо.
Но если по какой-то причине,Мне нужно изменить myFunction, чтобы она возвращала Promise вместо прямого значения, затем я изменяю его, но:
myFunction() : Promise<string> { //or async myFunction()...
....
return some_promise;
}
const x = myFunction(); //Now x is a Promise!!, no warning!
if(x != undefined){ //x will never be undefined!!
do_something_important;
}
Поскольку тип x выводится, никаких ошибок или предупреждений не выдается, и сейчасx никогда не будет неопределенным , и мой код будет делать неожиданные вещи.Итак, мне нужно помнить, что нужно менять везде, где я использовал myFunction, и объявлять переменные следующим образом:
const x : string = myFunction()
Затем он проверяет и выдает предупреждение о том, что обещание не может быть присвоено строке !!так что теперь я должен изменить его на что-то вроде этого:
const x : string = await myFunction()
И это здорово! Теперь это будет работать, как и ожидалось, но так как машинопись не заставляет меня объявлять типПеременная явно, я постоянно забываю это делать, и часто мне приходится работать с обещаниями, и тот же сценарий повторяется.Я думаю, что было бы неплохо не объявлять тип при использовании константных значений, таких как числа или строки, например let x = 0;
, но с функциями это может быть очень сложно, особенно если они возвращают обещания или типы, которые могут быть совместимы между ними.
Есть ли способ отключить вывод типа и вынудить меня объявить тип переменной?
Полагаю, я мог бы установить флаг flat noImplicitAny
и не инициализировать переменные ввремя объявления, но это помешало бы мне использовать const
помимо создания более уродливого кода, а также очень легко забыть, поэтому на самом деле это не решение.