如果没有打字(或tsd)怎么办?

时间:2016-04-25 07:13:20

标签: typescript strong-typing definitelytyped tsd

我正在查看TypeScript手册,我似乎无法找到答案。

如果我使用的库不存在任何类型,我有哪些选择?

一个是创建打字文件,但我真的不想这样做。

我的其他选择是什么,我似乎记得某种声明'关键字?

或者tsconfig中有什么东西?

我假设有一种方法可以全局声明这个变量(类型),所以每次使用它都会有效。

我认为有一种方法可以宣告它仅在一个文件中可用。

当然最好的方法是包含一个打字文件,但这并不总是可用。

2 个答案:

答案 0 :(得分:9)

如果您主要关心的是摆脱错误,只需在代码上方写上declare var MyUntypedLibrary: any;,其中 MyUntypedLibrary 是您的依赖关系的全局引用的名称。< / p>

如果您需要在多个文件中使用此引用并且不想重复自己,则可以将其写在任何文件的顶部,任何名称空间之上,并且整个项目都可以使用它。如果您有许多无类型的依赖项,那么在您定义这些依赖项时可能会有一个单独的ts文件。

注意:使用本地模块时,此方法正常。如果一个人正在使用外部模块并且希望有一个地方为他们所有人定义一个隐式依赖,那么这可能会更加麻烦,但是每个模块都应该在内部处理他们自己的依赖关系反正。

答案 1 :(得分:1)

虽然最好是创建自己的定义文件(.d.ts),但是克隆https://github.com/DefinitelyTyped/DefinitelyTyped存储库,添加它,然后创建一个拉回请求到它们的主干;你想在这里找到一个更快的解决方案。

您可以根据需要编写自己最简单的定义文件,并将其添加到项目中,从而使您远离等待接受/读取定义以在DefTyped trunk中合并。

但是你可以编写你的简单def文件,并创建pull请求,小def文件比没有def文件更好;)

创建定义的其他说明:http://definitelytyped.org/guides/creating.html

简单示例:

 interface JQuery {

    /* wrapped plugins */

    dynatree(options: any): any;

    multiselect(): JQuery;
    multiselect(MultiSelectSettings): any;
    multiselect(command: string): any;

    ajaxSubmit(options: any);
    layout(options: any);

    colpick(options?: any);
    colpickHide();

    idcDataTable(options?: any);

    dragscrollable(options: any);

    /* wrapped plugins - END */
}

interface JQueryStatic {
    layout: any;

    fileDownload: any;

    pnotify: any;

    sha256(input: string): string;
}