首页 > 解决方案 > 如何导出一个类并在同一个文件中有一个接口?

问题描述

考虑以下 TypeScript 文件:

// declare a jquery plugin, so that it can be used in the class
interface JQueryStatic {
  plot(arg: any, arg2: any, arg3: any): JQueryStatic;
}

export class Foo {
  public plotThings() {
    $.plot('#myDiv');  // ERROR HERE
                       // TS2339  (TS) Property 'plot' does not exist on type 'JQueryStatic'
  }              
}

所以找不到plot方法。但是,如果我删除export从类声明中删除,文件编译得很好。

那么,我怎样才能同时拥有 JQueryStatic 接口(以便能够使用 jQuery 插件)和导出的类?

标签: typescript

解决方案


你不能像这样扩展在其他地方声明的接口。打字稿命名空间每个文件的所有内容,因此它无法知道您的意思是由 jQuery 类型定义声明的全局接口。

因此,创建一个jquery.d.ts文件以包含您的 jQuery 特定扩展并添加它,以明确您的意思是全局扩展。

declare global {
    interface JQuery {
        plot(arg: any, arg2: any, arg3: any): JQuery;
    }
}

操场


推荐阅读