如果打字(或 tsd)不可用怎么办?

What to do if a typings (or tsd) is not available?

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

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

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

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

或者 tsconfig 中的某些内容?

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

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

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

尽管最好是创建您自己的定义文件 (.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;
}

如果您主要关心的只是消除错误,您只需在代码上方写上 declare var MyUntypedLibrary: any;,其中 MyUntypedLibrary 是全局引用的名称为了你的依赖。

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

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