打字稿没有选择正确的过载

时间:2016-12-15 03:11:32

标签: typescript mongoose

  • 打字稿版本:2.1.4
  • @ types / mongoose version:4.7.1

我使用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.MongoErrornext将为T

我错过了什么吗?   以及如何让它选择第二个post定义?

1 个答案:

答案 0 :(得分:0)

TypeScript始终选择与指定参数匹配的第一个重载。因为被调用者可能会忽略函数参数,这意味着接受更高arity回调的函数应该在更低arity的回调之后

第二个重载更具体(它可以处理较低总数的函数比前一个重载),因此在这种情况下第二个重载应该列在第一个重载之上。

TL; DR:.d.ts文件有错误,应该交换这两行post