我使用mongoose的类型:
post<T extends Document>(method: string, fn: (
error: mongodb.MongoError, doc: T, next: (err?: NativeError) => void
) => void): this;
post<T extends Document>(method: string, fn: (
doc: T, next: (err?: NativeError) => void
) => void): this;
在我的代码中:
function (schema: Schema) {
schema.post('remove', function (doc, next) { });
}
始终先选择post
定义,doc
将为mongodb.MongoError
,next
将为T
。
我错过了什么吗?
以及如何让它选择第二个post
定义?
答案 0 :(得分:0)
TypeScript始终选择与指定参数匹配的第一个重载。因为被调用者可能会忽略函数参数,这意味着接受更高arity回调的函数应该在更低arity的回调之后。
第二个重载更具体(它可以处理较低总数的函数比前一个重载),因此在这种情况下第二个重载应该列在第一个重载之上。
TL; DR:.d.ts文件有错误,应该交换这两行post
。