以下是什么意思作为一种类型:()=> void = null

时间:2017-01-26 07:34:09

标签: typescript

我正在查看这两个函数声明:

function f1(chainFn: (fn: Function) => void = null) {

}

function f2(): (...args: any[]) => (cls: any) => any {

}

我真的不明白以下部分的定义:

// function that accepts `fn` of Function type by returns what?
(fn: Function) => void = null

// function that accepts an array of arguments and returns a function that returns a result of `any` type?
(...args: any[]) => (cls: any) => any

任何人都可以详细说明并提供具体实施的例子吗?

2 个答案:

答案 0 :(得分:8)

() => void

是一个不带参数且不返回任何内容的函数类型。

() => void = null

根本不是一种类型。

f(g: () => void = null) { ... }

是一个函数,它接受g类型的另一个函数() => void作为参数,如果没有提供,则为该参数提供默认值null。这有效地使参数可选。

我想补充一点,在这种情况下,这是一种可怕的做法,因为JavaScript为未指定的参数传递了undefined而不是null,并且没有理由改变这种行为,因为这样做是奇怪。在这种情况下,最好是写

// g is optional and will be undefined if not provided
f(g?: () => void) { ... }

或写

// g is optional and will be a no-op if not provided.
f(g: () => void = () => {}) { ... }

答案 1 :(得分:7)

第一个函数f1接受一个参数chainFn,它是一个函数,作为参数接受函数fn并且不返回任何=> void,这个参数也是chainFn是可选的= null,其运行时默认值为undefined。

第二个函数f2不接受任何参数并返回一个函数。该函数接受任何类型...args:any[]的打开参数列表(您可以使用逗号分隔的参数var r = f2(); r(1,2,3,4);调用它),并返回一个接受任何类型作为参数并返回内容的函数。