我正在看这两个函数声明:
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
任何人都可以详细说明并提供具体实施的例子吗?
() => 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 = () => {}) { ... }
第一个函数f1
接受一个参数chainFn
,它是一个函数,作为参数接受函数fn
并且不返回任何内容=> void
,此参数chainFn
也是可选的= null
,运行时缺省值为undefined.
第二个函数f2
不接受任何参数并返回一个函数.该函数接受任何类型的打开参数列表...args:any[]
(可以使用逗号分隔的参数调用它var r = f2(); r(1,2,3,4);
),它返回一个接受任何类型作为参数并返回一些东西的函数.