20

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

如果我使用的库不存在任何类型,我的选择是什么?

一种是创建类型文件,但我真的不想这样做。

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

或者也许 tsconfig 中的某些东西?

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

而且我认为有一种方法可以声明它仅在一个文件中可用。

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

4

2 回答 2

10

如果您主要关心的是摆脱错误,您可以简单地declare var MyUntypedLibrary: any;在代码上方编写,其中MyUntypedLibrary是对您的依赖项的全局引用的名称。

如果您在多个文件中需要此引用并且不想重复自己,您可以将它写在任何文件的顶部,任何名称空间之上,并且它对整个项目都可用。如果您有许多无类型的依赖项,最好有一个单独的 ts 文件来定义它们。

注意:这在使用本地模块时可以正常工作。我猜想如果一个人使用外部模块并希望有一个地方为所有模块定义一个隐式依赖项,这可能会更麻烦,但是每个模块都应该在内部处理自己的依赖项。

于 2016-04-25T10:16:33.540 回答
1

尽管最好的方法是创建您自己的定义文件 (.d.ts),克隆https://github.com/DefinitelyTyped/DefinitelyTyped存储库,添加到其中,然后创建一个拉取请求返回到他们的主干;你想要一个更快的解决方案。

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

但是,您可以编写简单的 def 文件,并创建拉取请求,小 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;
}
于 2016-04-25T07:25:58.917 回答