JavaScript和TypeScript中的void的具体使用

 更新时间:2019年09月12日 15:01:03   作者:疯狂的技术宅  
这篇文章主要介绍了JavaScript和TypeScript中的void的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

如果你来自传统的强类型语言,可能会很熟悉 void 的概念:一种类型,告诉你函数和方法在调用时不返回任何内容。

void 作为运算符存在于 JavaScript 中,而作为基本类型存在于 TypeScript 中。在这两个世界中,void 的工作机制与大多数人习惯的有点不同。

JavaScript 中的 void

JavaScript 中的 void 是一个运算符,用于计算它旁边的表达式。无论评估哪个表达式,void总是返回undefined。

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

我们为什么需要这样的东西?首先在早期,人们能够覆盖 undefined 并给它一个实际值。 void 总是返回 real undefined。

其次,这是一种调用立即调用函数的好方法:

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,而 void 总是计算它旁边的表达式,你有一个非常简洁的方法从函数返回而不返回一个值,但仍然调用一个回调例如:

// returning something else than undefined would crash the app
function middleware(nextCallback) {
 if(conditionApplies()) {
  return void nextCallback();
 }
}

这让我想到了 void 最重要的通途:它是你程序的安全门。当你的函数总是应该返回 undefined 时,你可以确保始终如此。

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

TypeScript 中的 void

TypeScript 中的 void 是 undefined 的子类型。 JavaScript 中的函数总是返回一些东西。要么它是一个值,要么是 undefined:

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

因为没有返回值的函数总是返回 undefined,而 void 总是在 JavaScript 中返回 undefined,TypeScript 中的void 是一个正确的类型,告诉开发人员这个函数返回 undefined:

declare function iHaveNoReturnValue(i: number): void

void 作为类型也可以用于参数和所有其他声明。唯一可以传递的值是 undefined:

declare function iTakeNoParameters(x: void): void

iTakeNoParameters() // 👍
iTakeNoParameters(undefined) // 👍
iTakeNoParameters(void 2) // 👍

所以 void 和 undefined 几乎是一样的。虽然有一点点不同,但这种差别很大:作为返回类型的 void 可以用不同的类型替换,以允许高级回调模式:

function doSomething(callback: () => void) {
 let c = callback() // at this position, callback always returns undefined
 //c is also of type undefiend
}

// this function returns a number
function aNumberCallback(): number {
 return 2;
}

// works 👍 type safety is ensured in doSometing
doSomething(aNumberCallback) 

这是期望的行为,通常用于 JavaScript 程序。你可以在我的其他文章中阅读更多关于这种被称为 substitutability 的模式。

如果你想确保传递只返回 undefined 的函数(如“nothing”),请确保调整你的回调方法签名:

- function doSomething(callback: () => void) {
+ function doSomething(callback: () => undefined) { /* ... */ }

function aNumberCallback(): number { return 2; }

// 💥 types don't match
doSomething(aNumberCallback) 

大概大部分时间你都能和 void 很好的相处。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • JS匿名函数和匿名自执行函数概念与用法分析

    JS匿名函数和匿名自执行函数概念与用法分析

    这篇文章主要介绍了JS匿名函数和匿名自执行函数概念与用法,结合实例形式分析了匿名函数和匿名自执行函数的概念、功能、应用场景及相关使用技巧,需要的朋友可以参考下
    2018-03-03
  • JavaScript树型数据与一维数组相互转换方式

    JavaScript树型数据与一维数组相互转换方式

    这篇文章主要介绍了JavaScript树型数据与一维数组相互转换方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • 一文详解TypeScript中的内置数据类型

    一文详解TypeScript中的内置数据类型

    作为一门类型安全的编程语言,TypeScript 提供了多种内置数据类型,帮助我们更好地定义和操作数据,下面小编就来和大家详细聊聊这些数据类型的相关知识吧
    2023-06-06
  • 详解JavaScript什么情况下不建议使用箭头函数

    详解JavaScript什么情况下不建议使用箭头函数

    箭头函数作为ES6新增的语法,在使用时不仅能使得代码更加简洁,而且在某些场景避免this指向问题。但是箭头函数不是万能的,也有自己的缺点以及不适用的场景,本文总结了JavaScript什么情况下不建议使用箭头函数,感兴趣的可以了解一下
    2022-06-06
  • 原生js和jquery中有关透明度设置的相关问题

    原生js和jquery中有关透明度设置的相关问题

    设置透明度问题,比如图片的淡入淡出效果。下面我介绍一下在原生js和jQuery中设置透明度的相关问题和注意点
    2014-01-01
  • layer弹窗在键盘按回车将反复刷新的实现方法

    layer弹窗在键盘按回车将反复刷新的实现方法

    今天小编就为大家分享一篇layer弹窗在键盘按回车将反复刷新的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • 微信小程序实现banner图轮播效果

    微信小程序实现banner图轮播效果

    这篇文章主要为大家详细介绍了微信小程序实现banner图轮播效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • 浅析Echarts图表渲染导致内存泄漏的原因及解决方案

    浅析Echarts图表渲染导致内存泄漏的原因及解决方案

    在今年某个可视化大屏项目中,出现了一个问题,项目在运行一段时间后,页面出现了崩溃,而且是大概运行几天之后,因为大屏项目是部署到客户现场大屏,长时间运行不关闭,小编认为 Echarts 图表渲染导致了内存泄漏,本文将深入分析这一问题,并提供解决方案
    2023-10-10
  • js实现点赞效果

    js实现点赞效果

    这篇文章主要为大家详细介绍了js实现点赞效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • JavaScript Window浏览器对象模型原理解析

    JavaScript Window浏览器对象模型原理解析

    这篇文章主要介绍了JavaScript Window浏览器对象模型,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05

最新评论