我正在查看这两个函数声明:
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
任何人都可以详细说明并提供具体实施的例子吗?
答案 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);
调用它),并返回一个接受任何类型作为参数并返回内容的函数。