关于JavaScript和TypeScript中的void的注释

如果在对JavaScript感兴趣之前,您使用强类型的传统语言编写了代码,那么您可能已经熟悉void的概念。 这种类型的用法告诉程序员相应的函数和方法在调用时不返回任何内容。



void实体在JavaScript和TypeScript中也可用。 在JS中,这是一个运算符。 在TS中,这是原始数据类型。 到处都是, void行为不像其他语言中遇到void人所期望的那样。

JavaScript void语句


在JavaScript中, void运算符评估传递给它的表达式。 同时,无论对哪个表达式求值, void始终返回undefined

 let i = void 2; // i === undefined 

为什么我们需要这样的运算符?
首先,应该指出的是,在JS编程的早期,开发人员可以重新定义undefined并为其编写一些值。 但是void总是返回undefined的真实值。

其次,使用void运算符是使用立即调用的函数的一种有趣方式:

 void function() {  console.log('What') }() 

所有这些-不会污染全局名称空间:

 void function aRecursion(i) {  if(i > 0) {    console.log(i--)    aRecursion(i)  } }(3) console.log(typeof aRecursion) // undefined 

由于void运算符总是返回undefined并且总是对传递给它的表达式求值,因此我们可以采用一种非常有表现力的方式从函数返回而不返回任何值,但是可以通过调用(例如一些回调)来进行:

 //  -  undefined      function middleware(nextCallback) {  if(conditionApplies()) {    return void nextCallback();  } } 

这使我们找到了使用void的最重要方法。 该操作员是一种“岗哨”应用程序。 如果某个函数应始终返回undefined ,则可以使用void运算符来实现。

 button.onclick = () => void doSomething(); 

TypeScript中的无效数据类型


TypeScript中的void类型可以称为any的相反类型。 JavaScript中的函数总是返回某些内容。 这可以是程序员设置的值,也可以是undefined

 function iHaveNoReturnValue(i) {  console.log(i) } //  undefined 

由于未明确返回任何内容的JavaScript函数总是返回undefined ,因此TypeScript中的void是告诉开发人员该函数返回undefined的合适类型:

 declare function iHaveNoReturnValue(i: number): void 

类型形式的void实体也可以用于参数和任何其他变量声明。 始终可以传递给void参数的唯一值是undefined

 declare function iTakeNoParameters(x: void): void iTakeNoParameters() //  iTakeNoParameters(undefined) //  iTakeNoParameters(void 2) //  

结果,事实证明,在TS中, voidundefined类型几乎是同一回事。 但是它们之间只有一个小差异,而实际上这是非常重要的。 返回的void类型可以替换为其他类型,从而允许您实现用于回调的高级模式。

 function doSomething(callback: () => void) {  let c = callback() // callback   undefined  // c -  undefined } //     function aNumberCallback(): number {  return 2; } // ;    doSometing doSomething(aNumberCallback) 

开发人员希望通常在JS应用程序中使用的此类设计能够做到这一点。 这是有关此主题材料。

如果要让一个函数只接受返回undefined函数,则可以相应地更改方法签名:

 //  // function doSomething(callback: () => void) { //  function doSomething(callback: () => undefined) { /* ... */ } function aNumberCallback(): number { return 2; } //  -    doSomething(aNumberCallback) 

总结


JavaScript中的void运算符和TypeScript中的void数据类型是相当简单的实体。 它们适用的情况范围是有限的。 但是,应注意,使用它们的程序员很可能在使用它们时不会遇到任何问题。

亲爱的读者们! 您在JS和TS中使用void吗?


Source: https://habr.com/ru/post/zh-CN468229/


All Articles