Отключить вывод типа для переменных в Typescript - PullRequest
0 голосов
/ 28 октября 2018

Я хочу отключить вывод типов для переменных в 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 помимо создания более уродливого кода, а также очень легко забыть, поэтому на самом деле это не решение.

1 Ответ

0 голосов
/ 28 октября 2018

Typescript более мощный и предоставляет дополнительные типы, назначаемые с помощью '|' ключевое слово.

myFunction() : Promise<string> { //or async myFunction()...
  ....
  return "some string";
}
const x = myFunction();  //Now x is a Promise!!, no warning!
if(x != undefined){      //x will never be undefined!!
  do something;
}


const x: any = await myFunction();

export type defaultType = Promise<String> | String | Number | ...;
const x: defaultType = await myFunction();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...