[英]Overloaded typescript function parameter does not work with async keyword
我正在处理更大的项目类型定义文件。 我已将代码简化为一个孤立的示例:
模块定义fdts
export type myFunction = ((r: string) => Promise<any>) // async def
| ((r: string, done: (err: Error | null, b?: any) => void) => void) //callback def
export interface addFunc {
(c: string, f: myFunction): void
}
export interface FI {
addFunc: addFunc
}
export default function f(): FI
模块实现f.js
function f () {
return {
addFunc: (c, p) => {
this[c] = p
return this
}
}
}
module.exports = f
模块利用率指数
import f from './f'
f().addFunc('x', (r, d) => { // Compiles as expected
d(null)
})
f().addFunc('x', async (r) => { // Error ts(7006) Parameter 'r' implicitly has an 'any' type.
return null
})
您能否解释为什么会发生此错误,以及如何解决? 我认为问题出在类型定义中。
请不要对实现本身发表评论; 这是大型API的精简和隔离部分。
感谢您的帮助!
您需要将其更改为
f().addFunc('x', async (r: string) => {
return null
})
如果不添加: string
,则您的函数实际上是(r: any) => Promise<null>
,它不能分配给myFunction
类型。
您的示例中的第一种情况之所以编译,是因为TypeScript可以通过存在两个参数的事实来推断r
和d
的类型,这使得无法在myFunction
的并集定义中分配给第一种情况。 但是,当一个函数只有一个参数时,可以将其分配给具有一个或多个参数的类型,因此TypeScript无法自动推断r
的类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.