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

问题描述 投票:18回答:2

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

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

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

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

或者tsconfig中有什么东西?

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

而且我认为有一种方法可以宣称它只在一个文件中可用。

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

typescript strong-typing definitelytyped tsd
2个回答
9
投票

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

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

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


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;
}
© www.soinside.com 2019 - 2024. All rights reserved.