使用打字稿制作jquery ui的最佳方法

时间:2012-12-20 21:13:33

标签: jquery-ui typescript jquery-widgets

我正在制作一个jquery小部件,其中widget factory输入了typescript。如何在不写.d.ts的情况下提供良好的智能感知?

例如:

/*mywidget.ts*/

$.widget("ui.mywidget", {
    options: {
        myoption: ""
    },
    doSomething: function () {
        this._hasDoSomething = true;
        /*do doSomething*/
    },
    hasDoSomething: function (): bool {
        return <bool>this._hasDoSomething;
    }
});

/*mywidget.d.ts*/
interface MyWidgetOptions {
    myoption: string;
}

interface MyWidget extends Widget, MyWidgetOptions {}

interface NLIB { 
    mywidget: MyWidget;
}

interface JQuery {
    mywidget(): JQuery;
    mywidget(methodName: string): JQuery;
    mywidget(options: MyWidgetOptions): JQuery;
    mywidget(optionLiteral: string, optionName: string): any;
    mywidget(optionLiteral: string, options: MyWidgetOptions): any;
    mywidget(optionLiteral: string, optionName: string, optionValue: any): JQuery;
}

interface JQueryStatic {
    nlib: NLIB;
}


/// <reference path="teste.d.ts" />
$(".teste").mywidget({
    myoption: "asdadds"
});

为每个插件编写.d.ts太无聊了。还有其他选择吗?

请注意: 如果我不包含mywidget.d.ts,这段代码将无法编译,我将无法进行智能感知:

///<reference path="path/to/jqueryui-1.9.d.ts"/>
$(".teste").mywidget({ 
    myoption: "asdadds"
});

/ * 编译出: ...属性'mywidget'在'JQuery'类型的值上不存在 * /

2 个答案:

答案 0 :(得分:11)

GitHub上的DefinitelyTyped项目为大多数流行的JavaScript库提供了定义文件。

您需要做的就是下载您需要的文件,并在您的代码中引用它:

///<reference path="path/to/jqueryui-1.9.d.ts"/>

答案 1 :(得分:0)

如果您不想要.d.ts文件,只需在界面前使用declare关键字。 有关示例,请参阅https://stackoverflow.com/a/16967239/1859442

上的答案