如果类型(或 tsd)不可用怎么办?
Posted
技术标签:
【中文标题】如果类型(或 tsd)不可用怎么办?【英文标题】:What to do if a typings (or tsd) is not available? 【发布时间】:2016-08-18 11:07:05 【问题描述】:我正在查看 TypeScript 手册,但似乎找不到答案。
如果我使用的库不存在任何类型,我有什么选择?
一个是创建类型文件,但我并不想这样做。
我的其他选择是什么,我似乎记得某种“声明”关键字?
或者可能是 tsconfig 中的某些内容?
我假设有一种方法可以全局声明这个变量(类型),所以每次我使用它时,它都会起作用。
我认为有一种方法可以声明它仅在一个文件中可用。
当然,最好的方法是包含一个类型文件,但这并不总是可用的。
【问题讨论】:
【参考方案1】:如果您最关心的只是消除错误,您可以简单地在代码上方写上declare var MyUntypedLibrary: any;
,其中 MyUntypedLibrary 是对您的依赖项的全局引用的名称。
如果您在多个文件中需要此引用并且不想重复自己,您可以将它写在任何文件的顶部、任何命名空间之上,并且整个项目都可以使用它。如果您有许多无类型的依赖项,最好有一个单独的 ts 文件来定义它们。
注意:这在使用本地模块时可以正常工作。我猜如果一个人使用外部模块并希望有一个地方为它们所有人定义一个隐式依赖关系,这可能会更麻烦,但是每个模块都应该在内部处理它们自己的依赖关系。
【讨论】:
【参考方案2】:虽然最好的方法是创建您自己的定义文件 (.d.ts),但克隆 https://github.com/DefinitelyTyped/DefinitelyTyped 存储库,添加到其中,然后创建一个拉取请求返回到他们的主干;你想要一个更快的解决方案。
您可以根据需要编写自己最简单的定义文件,并将其添加到您的项目中,这样您就不必等待定义被接受/读取以合并到 DefTyped 主干中。
但是你可以编写简单的 def 文件,然后创建 pull request,小 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;
【讨论】:
以上是关于如果类型(或 tsd)不可用怎么办?的主要内容,如果未能解决你的问题,请参考以下文章