打字稿编译器选择错误的重载
Posted
技术标签:
【中文标题】打字稿编译器选择错误的重载【英文标题】:Typescript compiler selecting wrong overload 【发布时间】:2016-04-06 03:26:21 【问题描述】:在mongoose.d.ts
“DefinitelyTyped”文件中,geoNear
函数有两个重载:
geoNear(point: type: string; coordinates: number[] , options: Object, callback?: (err: any, res: T[]) => void): Query<T[]>;
geoNear(point: number[], options: Object, callback?: (err: any, res: T[]) => void): Query<T[]>;
我已将point
定义为
const point = type: "Point", coordinates: [lng, lat]
其中lng
和lat
都是number
s,但是当我这样称呼它时:
Location.geoNear(point,
spherical: true,
maxDistance: theEarth.getRadiansFromDistance(maxDistance),
num: 10
, (err, results, stats) =>
var locations = []
results.forEach((doc: any) =>
locations.push(
distance: theEarth.getDistanceFromRadians(doc.dis),
name: doc.obj.name,
address: doc.obj.address,
rating: doc.obj.rating,
facilities: doc.obj.facilities,
_id: doc.obj._id
)
)
res.status(200).json(locations)
)
编译器抱怨
Argument of type ' type: string; coordinates: number[]; ' is not assignable to parameter of type 'number[]'
如何强制tsc
使用第一个重载?
【问题讨论】:
【参考方案1】:您发送的回调需要 3 个参数,而不是接口中定义的 2 个。 您正在发送:
, (err, results, stats) =>
当方法期望时:
callback?: (err: any, res: T[]) => void
你的回调应该是:
, (err, results) =>
【讨论】:
DefinitelyTyped 中的.d.ts
文件似乎不适合此功能。回调参数应该是<T>(err: any, result: T[], stats: any) => void
,但是你的回答是正确的。以上是关于打字稿编译器选择错误的重载的主要内容,如果未能解决你的问题,请参考以下文章