我想推断一个接受函数作为参数的函数的返回类型。没有代码很难解释。所以我们开始:
const funcNumber = (arg: boolean) => (code: string) => Promise.resolve(100)
const funcString = (arg: boolean) => (code: string) => Promise.resolve("Hello")
const doSomethingCool = (callback) => (code: string) => {
const requestMethod = callback(false)
return Promise.all([requestMethod(code)])
}
const inferNumberType = doSomethingCool(funcNumber) // Promise<any[]> should be Promise<number[]>
const inferStringType = doSomethingCool(funcString) // Promise<any[]> should be Promise<string[]>
我希望inferNumberType
具有类型Promise<number[]>
和inferStringType
具有类型Promise<string[]>
。
由于我对TS知之甚少,所以不太确定如何实现它以及在哪里寻找解决方案。
这里是游乐场:here
答案 0 :(得分:1)
如果添加通用类型参数并使用它正确键入callback
参数,则所有参数都将按预期运行
const funcNumber = (arg: boolean) => (code: string) => Promise.resolve(100)
const funcString = (arg: boolean) => (code: string) => Promise.resolve("Hello")
const doSomethingCool = <R>(callback: (a:boolean) => (code: string)=> Promise<R>) => (code: string) => {
const requestMethod = callback(false)
return Promise.all([requestMethod(code)])
}
const inferNumberType = doSomethingCool(funcNumber)('') // Promise<number[]>
const inferStringType = doSomethingCool(funcString)('') // Promise<string[]>