从Typescript中的外部库扩展原型

时间:2016-08-10 19:04:30

标签: javascript typescript module typescript1.8 typescript-typings

我想在Typescript(1.8)中扩展外部库的原型。在我的案例中,外部库是google.maps,其中包含了来自NuGet的Typescript Definition文件。现在我想通过在文件中添加这样的距离函数来扩展google.maps.LatLng的原型" extensions.ts":

/// <reference path="./google.maps.d.ts" />
export {}

declare global {
    interface google.maps.LatLng {
        distanceTo(google.maps.LatLng): number;
    }
}

google.maps.LatLng.prototype.distanceTo = function(other) {
    return google.maps.geometry.spherical.computeDistanceBetween(this, other);
}

然后我想用它:

import "./extensions.ts"

let p1 = new google.maps.LatLng(5, 5);
let p2 = new google.maps.LatLng(10, 10);

console.log(p1.distanceTo(p2))

但是,此代码不适用于许多错误:/ 解决这个问题的正确方法是什么?扩展像Array或String这样的全局声明的工作方式与here一样。

注意:要使生成的文件生效,您还必须包含google maps javascript库:

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?libraries=geometry&key=[your-key-here]&sensor=FALSE"></script>

1 个答案:

答案 0 :(得分:1)

您几乎就在那里,只是您无法定义界面及其命名空间。
应该是:

declare global {
    module google.maps {
        interface LatLng {
            distanceTo(other: LatLng): number;
        }
    }
}

它编译,但我没有运行它所以我没有检查运行时问题。

此外,导入时请不要使用.ts扩展名:

import "./extensions"