【译】JavaScript和TypeScript中的void

简介: 【译】JavaScript和TypeScript中的void

640.jpg


原文地址:https://fettblog.eu/void-in-javascript-and-typescript/

原文标题:void in JavaScript and TypeScript


- 正文开始 -


如果你是从传统的强类型语言转到JavaScript来的,那么你可能熟悉void的概念:一种类型,它告诉你函数和方法在调用时不返回任何内容。

void在JavaScript中作为运算符存在,在TypeScript中作为基本类型存在。在JS和TS中,void的用法和大多数人习惯的有所不同。


JavaScript中的void


JS中的void是一个运算符,它对紧跟其后的表达式求值。不管是什么表达式,void总是返回undefined


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


为什么我们需要这么写?这是因为在早些时候,人们可以重写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,并且void总是会对表达式求值,所以有一个非常简单的方法,从函数返回而不返回值,但是仍然调用回调函数:


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


我认为,void最重要的用法:因为void总是返回undefined,他是你app安全的守护者。


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


TypeScript中的void


TypeScript中的voidundefined的子类型。JS中的函数总会有返回,要么是一个具体的值,要么是undefined.


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


在JS中,如果没有具体的返回值的函数会返回undefined,并且void总是会返回undefined,TS中的void是y一个合适的类型,告诉开发人员此函数返回undefined


declare function iHaveNoReturnValue(i: number): void


void作为一个类型,也可以用在函数参数和其他的声明上。唯一可以传入的值是void


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

voidundefined几乎是一样的。但是还是有一点不同,这个区别是十分重要的:

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 numberfunction aNumberCallback(): number { return 2;}
// works 👍 type safety is ensured in doSometingdoSomething(aNumberCallback)


如果你想确保只能传入返回undefined的函数,调整你的回调函数类型:


- function doSomething(callback: () => void) {+ function doSomething(callback: () => undefined) { /* ... */ }
function aNumberCallback(): number { return 2; }
// 💥 types don't matchdoSomething(aNumberCallback)


现在,在大多数时候,你都可以很好的处理void了。

- 正文结束 -

相关文章
|
4月前
|
JavaScript 前端开发 安全
TypeScript的优势与实践:提升JavaScript开发效率
【10月更文挑战第8天】TypeScript的优势与实践:提升JavaScript开发效率
|
4月前
|
JavaScript 前端开发 安全
深入理解TypeScript:增强JavaScript的类型安全性
【10月更文挑战第8天】深入理解TypeScript:增强JavaScript的类型安全性
77 0
|
4月前
|
JavaScript 前端开发 IDE
深入理解TypeScript:提升JavaScript开发的利器
【10月更文挑战第8天】 深入理解TypeScript:提升JavaScript开发的利器
43 0
|
3月前
|
JavaScript 前端开发 安全
探索Deno:新一代JavaScript/TypeScript运行时
Deno是由Node.js创始人Ryan Dahl发起的新一代JavaScript/TypeScript运行时,旨在提升安全性、模块化和性能。本文介绍了Deno的核心特性,如内置TypeScript支持、强大的模块系统、权限管理和测试工具,以及开发技巧,帮助开发者构建更安全、高效的Web应用。
|
3月前
|
JavaScript 前端开发 安全
JavaScript与TypeScript的对比,分析了两者的特性及在实际项目中的应用选择
本文深入探讨了JavaScript与TypeScript的对比,分析了两者的特性及在实际项目中的应用选择。JavaScript以其灵活性和广泛的生态支持著称,而TypeScript通过引入静态类型系统,提高了代码的可靠性和可维护性,特别适合大型项目。文章还讨论了结合使用两种语言的优势,以及如何根据项目需求和技术背景做出最佳选择。
88 4
|
3月前
|
机器学习/深度学习 人工智能 JavaScript
JavaScript和TypeScript的未来发展趋势及其在Web开发中的应用前景
本文探讨了JavaScript和TypeScript的未来发展趋势及其在Web开发中的应用前景。JavaScript将注重性能优化、跨平台开发、AI融合及WebAssembly整合;TypeScript则强调与框架整合、强类型检查、前端工程化及WebAssembly的深度结合。两者结合发展,特别是在Vue 3.0中完全采用TypeScript编写,预示着未来的Web开发将更加高效、可靠。
84 4
|
3月前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
57 2
|
3月前
|
JavaScript 前端开发 安全
掌握TypeScript:提升JavaScript开发质量
本文介绍了TypeScript如何通过其静态类型系统、面向对象特性及对现代JavaScript特性的支持,提升JavaScript开发的质量,包括减少错误、增强代码可维护性和利用类型推断等功能,适用于大型项目开发。
|
3月前
|
Web App开发 JavaScript 前端开发
探索Deno:新一代JavaScript/TypeScript运行时环境
【10月更文挑战第25天】Deno 是一个新兴的 JavaScript/TypeScript 运行时环境,由 Node.js 创始人 Ryan Dahl 发起。本文介绍了 Deno 的核心特性,如安全性、现代化、性能和 TypeScript 支持,以及开发技巧和实用工具。Deno 通过解决 Node.js 的设计问题,提供了更好的开发体验,未来有望进一步集成 WebAssembly,拓展其生态系统。
|
3月前
|
JavaScript 安全 前端开发
探索Deno 1.x:安全JavaScript/TypeScript运行时的新篇章
【10月更文挑战第21天】Deno 1.x 是由Node.js创始人Ryan Dahl发起的项目,旨在解决Node.js的安全和模块化问题。Deno 1.x 版本带来了统一的运行时、默认安全、ES模块支持和内置TypeScript支持等新特性。其安全模型基于最小权限原则、沙箱环境和严格的远程代码执行控制,适用于Web服务器、命令行工具、桌面和移动应用及微服务开发。本文探讨了Deno 1.x的核心特性、安全模型及其在现代Web开发中的应用。

热门文章

最新文章