JavaScript和TypeScript中的void的具体使用
如果你来自传统的强类型语言,可能会很熟悉void的概念:一种类型,告诉你函数和方法在调用时不返回任何内容。
void作为运算符存在于JavaScript中,而作为基本类型存在于TypeScript中。在这两个世界中,void的工作机制与大多数人习惯的有点不同。
JavaScript中的void
JavaScript中的void是一个运算符,用于计算它旁边的表达式。无论评估哪个表达式,void总是返回undefined。
leti=void2;//i===undefined
我们为什么需要这样的东西?首先在早期,人们能够覆盖undefined并给它一个实际值。void总是返回realundefined。
其次,这是一种调用立即调用函数的好方法:
voidfunction(){ console.log('What') }()
所有这些都没有污染全局命名空间:
voidfunctionaRecursion(i){ if(i>0){ console.log(i--) aRecursion(i) } }(3) console.log(typeofaRecursion)//undefined
由于void总是返回undefined,而void总是计算它旁边的表达式,你有一个非常简洁的方法从函数返回而不返回一个值,但仍然调用一个回调例如:
//returningsomethingelsethanundefinedwouldcrashtheapp functionmiddleware(nextCallback){ if(conditionApplies()){ returnvoidnextCallback(); } }
这让我想到了void最重要的通途:它是你程序的安全门。当你的函数总是应该返回undefined时,你可以确保始终如此。
button.onclick=()=>voiddoSomething();
TypeScript中的void
TypeScript中的void是undefined的子类型。JavaScript中的函数总是返回一些东西。要么它是一个值,要么是undefined:
functioniHaveNoReturnValue(i){ console.log(i) }//returnsundefined
因为没有返回值的函数总是返回undefined,而void总是在JavaScript中返回undefined,TypeScript中的void是一个正确的类型,告诉开发人员这个函数返回undefined:
declarefunctioniHaveNoReturnValue(i:number):void
void作为类型也可以用于参数和所有其他声明。唯一可以传递的值是undefined:
declarefunctioniTakeNoParameters(x:void):void iTakeNoParameters()//