我想在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>
答案 0 :(得分:1)
您几乎就在那里,只是您无法定义界面及其命名空间。
应该是:
declare global {
module google.maps {
interface LatLng {
distanceTo(other: LatLng): number;
}
}
}
它编译,但我没有运行它所以我没有检查运行时问题。
此外,导入时请不要使用.ts
扩展名:
import "./extensions"