当使用typescript时,我需要导入一个插件.d、 我使用的每个外部js的ts?

推荐答案

jQuery插件(以及其他基于插件的库)的问题在于,你不仅需要一个库.d、 ts文件的基础库,但你还需要一个插件.d、 每个插件的ts文件.不知怎么的,这个插件.d、 ts文件需要扩展库中定义的库接口.d、 ts文件.幸运的是,TypeScript有一个漂亮的小功能,可以让你做到这一点.

对于classes,目前在一个项目中一个类只能有一个cononical定义.所以,如果你定义了class Foo,你在Foo上加的成员就是你得到的全部.Foo的任何附加定义都将导致错误.然而,对于interfaces,成员是加法的,因此如果用一组成员定义interface Bar,则可以第二次定义"接口栏",将其他成员添加到interface.这是以强类型方式支持jQuery插件的关键.

你需要添加一个插件来支持jQuery.d、 要使用的插件的ts文件.我们在项目中使用jQuery Templates,所以这里是jquery.tmpl.d、 我们创建ts文件是为了添加对该插件的支持:

interface JQuery
{
    tmpl(data?:any,options?:any): JQuery;
    tmplItem(): JQueryTmplItem;
    template(name?:string): ()=>any;
}

interface JQueryStatic
{
    tmpl(template:string,data?:any,options?:any): JQuery;
    tmpl(template:(data:any)=>string,data?:any,options?:any): JQuery;
    tmplItem(element:JQuery): JQueryTmplItem;
    tmplItem(element:HTMLElement): JQueryTmplItem;
    template(name:string,template:any): (data:any)=>string[];
    template(template:any): JQueryTemplateDelegate;
}

interface JQueryTemplateDelegate {
    (jQuery: JQueryStatic, data: any):string[];
}

interface JQueryTmplItem
{
    data:any;
    nodes:HTMLElement[];
    key:number;
    parent:JQueryTmplItem;
}

我们做的第一件事就是定义添加到JQuery接口的方法.当你输入$('#foo').tmpl();时,这些让你得到智能感知和类型判断.接下来,我们在JQueryStatic接口中添加了方法,当你输入$.tmpl();时会显示出来.最后,jQuery Templates插件定义了一些自己的数据 struct ,所以我们需要为这些 struct 定义接口.

既然我们已经定义了额外的接口,我们只需要从用户那里引用它们.ts文件.要做到这一点,我们只需将下面的参考资料添加到我们的.ts文件,就这样.对于该文件,TypeScript将同时看到基本jQuery方法和插件方法.如果你使用多个插件,只需确保你引用了所有的插件.d、 ts文件,你应该很好.

/// <reference path="jquery.d.ts"/>
/// <reference path="jquery.tmpl.d.ts" />

Typescript相关问答推荐

根据另一个成员推断类成员的类型

在这种情况下,如何获得类型安全函数的返回值?

使用带有RxJS主题的服务在Angular中的组件之间传递数据

Redux—Toolkit查询仅在不为空的情况下添加参数

编剧错误:正在等待Expect(Locator).toBeVisible()

如何在LucideAngular 添加自定义图标以及如何使用它们

如何使用WebStorm调试NextJS的TypeScrip服务器端代码?

如何将定义模型(在Vue 3.4中)用于输入以外的其他用途

在React中定义props 的不同方式.FunctionalComponent

判断映射类型内的键值的条件类型

基于泛型的条件接口键

TS2739将接口类型变量赋值给具体变量

在单独的组件中定义React Router路由

如何在打字角react 式中补齐表格组

字符串文字联合的分布式条件类型

来自枚举的<;复选框和组件列表

如何调整项目数组,但允许权重影响顺序

如何将对象的字符串文字属性用作同一对象中的键类型

在对象数组中设置值

如何向我的自定义样式组件声明 custom.d.ts ?