禁用Typescript中变量的类型推断

时间:2018-10-28 04:15:17

标签: typescript es6-promise

我想为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()

那太棒了!现在,它可以按预期工作,但是由于typescript不会强迫我明确声明变量的类型,所以我一直忘了这么做,通常我必须这样做兑现承诺,并重复相同的情况。 我认为使用常量值(例如数字或字符串,即let x = 0;)时不必声明类型是可以的,但是使用函数,特别是当它们返回可在它们之间兼容的promise或类型时,可能会变得非常棘手。

是否可以禁用类型推断并强制我声明变量类型?

我想我可以设置平坦的noImplicitAny标志,并且在声明时不初始化变量,但这会阻止我使用const而不是编写丑陋的代码,而且,很容易忘记,所以不是真正的解决方案。

1 个答案:

答案 0 :(得分:0)

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();