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