打字稿编译器选择错误的重载

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] 

其中lnglat 都是numbers,但是当我这样称呼它时:

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 文件似乎不适合此功能。回调参数应该是&lt;T&gt;(err: any, result: T[], stats: any) =&gt; void,但是你的回答是正确的。

以上是关于打字稿编译器选择错误的重载的主要内容,如果未能解决你的问题,请参考以下文章

打字稿编译错误:错误 TS1109:预期表达式

通过webpack生产模式编译时如何忽略打字稿错误

错误:TS2345:使用打字稿编译时

编译节点模块时出现打字稿错误

打字稿错误 TS1005: ';'预期(二)

编译打字稿时如何防止错误“对象类型的索引签名隐式具有'任何'类型”?