我想禁用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()
然后它会进行验证并显示一个警告,说明promise不能赋值给字符串!!所以我将它修改为如下形式:
const x : string = await myFunction()
**这太棒了!**现在它可以按预期工作了,但是因为typescript没有强迫我显式声明变量的类型,所以我总是忘记这样做,而且经常我不得不使用promises,同样的场景重复出现。我认为当使用常量值时,比如数字或字符串,比如let x = 0;
,不需要声明类型是可以的。但是对于函数来说,它可能会变得非常棘手,特别是如果它们返回的承诺或类型可以在它们之间兼容的话。
是否有办法禁用类型推断并强制我声明变量类型?
我想我可以设置平面noImplicitAny
标志,并且在声明时不初始化变量,但这将阻止我使用const
,除了使代码更丑陋,而且,非常容易忘记,所以不是一个真正的解决方案。
1条答案
按热度按时间ckx4rj1h1#
Typescript功能更强大,它提供了使用"|'关键字。