我想为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
而不是编写丑陋的代码,而且,很容易忘记,所以不是真正的解决方案。
答案 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();