引用定义中外部模块中的类型

时间:2016-01-06 21:36:27

标签: jquery typescript

我正在编写一个将作为外部模块公开的库(此帖子的Foo)。我还编写了jQuery插件/扩展,它将拉取对象的实例(来自Foo.Button)。

我发现哪种方式有用,就是在我的界面文件中将我的类重新声明为接口:

declare interface JQuery_Button {
        text():string;
}

interface JQueryStatic {
    fooButton(): JQuery_Button[];
}


interface JQuery {
    fooButton(): JQuery_Button[];
}

它的工作方式很多,但会导致大量冗余代码。引用我的外部模块的代码也会期望Foo.Button而不是JQuery_Button。

我还看了一下在定义文件中声明模块,我也得到了一些有用的东西。但是,它需要更改我的jQuery.d.ts文件才能工作,而且我不想更改jQuery.d.ts。

在我的理想世界中,我希望能够编写如下代码:

import Foo = require('Foo');
import $ = require('jquery');

let someButton : Foo.Button = $('#someButton').fooButton();
let buttonText : string = someButton.text();

在VS Code中使用intellisense进行了很好的类型检查。

有没有办法做到这一点或类似的东西?

1 个答案:

答案 0 :(得分:1)

  

在我理想的世界里,我希望能够编写这样的代码:

如果你想要的只是:

import Foo = require('Foo');
import $ = require('jquery');

let someButton : Foo.Button = $('#someButton').fooButton();
let buttonText : string = someButton.text(

然后您应该触摸的界面是JQuery(不是JQueryStatic)。

declare interface JQuery_Button {
        text():string;
}

interface JQuery {
    fooButton(): JQuery_Button[];
}