typescript - 当我无法修改原始 Javascript 时,如何在 TypeScript 中表示一个 "standard"Javascript 对象构造函数(new ())?

标签 typescript

我正在开展一个项目,将类型注释(一个 .d.ts 文件)添加到现有的大型 Javascript 代码库中。 .d.ts 文件将与 Javascript 一起存在,但我无法对 Javascript 进行任何更改以支持该项目。

在现有的代码中,有这样的东西:

...

window.MyGlobal.Service = function () {

}
window.MyGlobal.Service.prototype = {
   baseURL: 'http://...';
}

...

期望我们稍后会做类似的事情

var svc = new window.MyGlobal.Service();

我不知道如何在 TypeScript 中表示它。我有

interface Service {
    baseURL: string;
}

但我不确定要在 MyGlobal 的界面中放入什么。我试过了

interface MyGlobal { 
    Service: Service;
}

但我不能在上面使用 new()。我可以把它改成

interface MyGlobal {
    Service(): void;
}

这样我就可以使用 new();但它丢失了有关服务接口(interface)的类型信息。

是否可以在 TypeScript 中处理这种情况?

最佳答案

选项 1:

declare module MyGlobal {
    class Service {
        baseURL: string;
    }   
}

interface Window {
    MyGlobal: { Service: MyGlobal.Service; }    
}

var svc = new window.MyGlobal.Service();
var x = svc.baseURL;

选项 2:

declare module MyGlobal {
    interface Service {
        baseURL: string;
    }   
}

interface Window {
    MyGlobal: { Service: { new(): MyGlobal.Service } }  
}

var svc = new window.MyGlobal.Service();
var x = svc.baseURL;

关于typescript - 当我无法修改原始 Javascript 时,如何在 TypeScript 中表示一个 "standard"Javascript 对象构造函数(new ())?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17864522/

相关文章:

javascript - Angular 2+ 和去抖动

node.js - swagger-ui-express模块​​,只实例化最后定义的文档

javascript - Angular/Typescript class.name 在生产构建中不起作用

javascript - 如何设置一个对象函数等于另一个

node.js - 无法让 TypeScript 监视我的项目和 nodemon 重新加载它

javascript - 如何定义[key, val]的TS类型?

javascript - 如何在 Ionic 中的选项卡之间传递数据

json - Typescript with TypeLite - 运行时类型检查

angular - 在 Angular 2 : Cannot find name 'Papa' 中使用 Papaparse

html - 在 Angular html 模板中访问常量枚举