美文网首页
avaScript和TypeScript中的void

avaScript和TypeScript中的void

作者: 年轻人多学点 | 来源:发表于2021-02-10 23:12 被阅读0次

如果你是从传统的强类型语言转到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 app
function middleware(nextCallback) {
if(conditionApplies()) {
return void nextCallback();
}
}
我认为,void最重要的用法:因为void总是返回undefined,他是你app安全的守护者。

button.onclick = () => void doSomething();
TypeScript中的void
TypeScript中的void是undefined的子类型。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) // ?
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)
如果你想确保只能传入返回undefined的函数,调整你的回调函数类型:

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

function aNumberCallback(): number { return 2; }

// ? types don't match
doSomething(aNumberCallback)
现在,在大多数时候,你都可以很好的处理void了

相关文章

  • avaScript和TypeScript中的void

    如果你是从传统的强类型语言转到JavaScript来的,那么你可能熟悉void的概念:一种类型,它告诉你函数和方法...

  • (二)typeScript 基础类型的介绍

    typeScript 中的类型比JavaScriptzh主要多了Tuple(元组)、Enum(枚举)、void(无...

  • TypeScript void 和 undefined 的区别

    在 JavaScript 中,不返回任何值的函数将隐式返回 undefined 值。 但是,在 TypeScrip...

  • Object.keys/values/entries

    avaScript 中的数据结构 Set、Map、Array 都有 keys(),values() 和 entri...

  • getBoundingClientRect加一些事件

    avaScript中getBoundingClientRect()方法详解 getBoundingClientRe...

  • void和void*

    总结: void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。 1...

  • void和void *

    一、void void的意思是“无类型”,相对于void *来说,使用的时候比较简单,一般只在两个地方使用: 当函...

  • void 和 void *

    一...void的含义void即“无类型”,void *则为“无类型指针”,可以指向任何数据类型。(1)void指...

  • void 和 void*

    void指针是什么? void指针一般被称为通用指针或泛指针,它是C关于“纯粹地址(raw address)”的一...

  • JavaScript 作用域

    作用域可访问变量的集合。 avaScript 作用域在 JavaScript 中, 对象和函数同样也是变量。在 J...

网友评论

      本文标题:avaScript和TypeScript中的void

      本文链接:https://www.haomeiwen.com/subject/gerqxltx.html