如何在lib.d.ts中扩展声明的变量?

时间:2016-04-22 10:59:56

标签: typescript

我刚下载了一个名为History.js

的javascript库

它是javascript中历史对象的包装器,用于执行正确的跨平台功能。

您可以在正常的Javascript环境中使用它,例如像这样:History.pushState(data,title,url);

但是我想在Typescript环境中使用它,这意味着我必须在d.ts文件中声明函数/变量,但是历史变量已经在默认的lib.d.ts中声明。

我可以在这里看到它(第10475行,第10485行和第16363行):

interface History {
    length: number;
    state: any;
    back(distance?: any): void;
    forward(distance?: any): void;
    go(delta?: any): void;
    pushState(statedata: any, title?: string, url?: string): void;
    replaceState(statedata: any, title?: string, url?: string): void;
}

declare var History: {
    prototype: History;
    new (): History;
}

declare var history: History;

所以现在我的问题是如何使用History.js库?我需要做些什么才能写出" History.pushState(data,title,url);"在打字稿?

我相信我必须编辑"声明var历史:{...}"对此(如果我错了,纠正我):

declare var History: {
    prototype: History;
    new (): History;
    pushState(data: any, title: string, url: string): void;
}

之后,我现在可以写History.pushState(...);在我的Typescript代码中。

但我无法保存lib.d.ts文件,因为它受到保护。即使我可以保存它也不是那么好,因为那时我可以使用其他可能没有History.js的项目中的函数,这会产生错误(我相信lib.d.ts在所有项目)。

那么我怎么能实现这个目标呢?

1 个答案:

答案 0 :(得分:0)

好吧,我刚刚发现其他人创建了一个绝对类型的库,他们遇到了同样的问题,并采取了另一种解决方法。

https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/history/history-tests.ts