Javascript 在Typescript中使用外部JS库(基本原语图)

Javascript 在Typescript中使用外部JS库(基本原语图),javascript,typescript,Javascript,Typescript,我正在采取第一步,将一个相当大的项目从javascript迁移到typescript。作为一名大约2年前才开始javascript开发的Java开发人员,我的工具链还处于初级阶段 我正在尝试将一个小JS文件迁移到TS作为概念证明。JS代码配置了一个 几乎所有的事情都成功了。但我在以typescript可以理解的方式声明全局作用域函数时遇到了大问题。以下是我代码的一小部分: export {} declare global { export interface Window { MyG

我正在采取第一步,将一个相当大的项目从javascript迁移到typescript。作为一名大约2年前才开始javascript开发的Java开发人员,我的工具链还处于初级阶段

我正在尝试将一个小JS文件迁移到TS作为概念证明。JS代码配置了一个

几乎所有的事情都成功了。但我在以typescript可以理解的方式声明全局作用域函数时遇到了大问题。以下是我代码的一小部分:

export {}
declare global {
  export interface Window {
    MyGlobalVar: any;
  }

  export ChartItemConfig{
    //properties
  }

  //I thought this and the following declarations would solve the problem. They dont :(
  export interface primitives {
    orgdiagram: Orgdiagram;
  }

  export interface Orgdiagram {
    Config: Config;
  }

  export interface Config {
    //properties
  }
}

window.MyGlobalVar.myGlobalFunction = function (id: string, items: Array<ChartItemConfig>) {
    //... more code
    // @ts-ignore
    let options: Config = new primitives.orgdiagram.Config();
    //... more code
 }
编辑:

我终于成功了。解决我问题的方法是:)

我的工作宣言现在是

export {}
declare global {
      
  const primitives:Primitives;

  class Primitives {
    orgdiagram: Orgdiagram;
  }

  class Orgdiagram {
    Config: ConfigConstructor;
  }

  interface ConfigConstructor{
    new (): Config;
  }

  class Config {
    //....

您需要做的是声明一个
常量

declare global {
    export const primitives: Primitives

    export interface Primitives {
        orgdiagram: Orgdiagram;
    }
}
通过这种方式,您告诉Typescript“相信我,在全局范围中的其他地方声明了一个常量,该常量称为
基本体
,其类型为
基本体
”。并生成正确的代码

对于构造函数,您需要指定函数是构造函数,以便能够将其与
new
一起使用:

export class Orgdiagram {
    Config: { new(): Config };
}

我认为您误解了接口的用途,它们等同于类型/类,但您可以创建一个对象,该对象必须符合接口的属性a.k.a.
export interface Person{name:string}const myPerson:Person={name'Mike'}
运行时接口本身不存在,它只是为ts编译器准备的。哦,谢谢,朝着正确的方向迈出了一大步。但是仍然存在一个问题,TS不知道如何处理构造函数。当前代码:
导出常量原语:原语
导出类原语{orgdiagram:orgdiagram;}
导出类orgdiagram{Config:()=>Config;}
导出类配置{}
当前错误:
TS7009:'new'表达式,其目标缺少构造签名,隐式地具有“any”类型。
很抱歉将formatting@samjaf对不起,我没看到你也需要这个。不管怎样,你还是设法自己修好了
export class Orgdiagram {
    Config: { new(): Config };
}