我有一个简单的函数,它接受一个函数作为参数并返回一个新函数。调用返回的函数时,我得到 Object is of type 'unknown'
const makeFunction = <T>(callback: (someParam: number, options: T) => any) => {
return (options: T) => {
const param = 4;
return callback(param, options)
}
}
上面的代码对于打字稿是可以的,但是当我调用函数时,我得到了投诉
makeFunction((param, options) => {
const a = options.optionsValue //(parameter) options: unknown, Object is of type 'unknown'
})({optionsValue: 'some value'})
原文由 Sam 发布,翻译遵循 CC BY-SA 4.0 许可协议
我们需要思考 TS 如何从这个定义中推断出类型。 TS 可以从两个地方理解类型:
在您的用例中,您没有在任何这些地方提供类型,这就是您得到
unknown
的原因,因为 TS 如何知道您需要什么参数类型。为了让 TS 有可能了解您可以执行的类型,或者:通过以下方式显式设置通用:
通过例如预先定义一个回调函数来设置类型:
您也可以通过说
((param: number, options: MyType))
来内联执行此操作如果
options
可以是动态的,请在评论后回答我相信你想要以下行为:
我们说几句:
F
现在是从二元函数扩展而来的函数,我们直接推断它的类型Parameters<F>[1]
是给定函数的第二个参数类型F
类型