当我无法修改原始Javascript时,如何在TypeScript中表示“标准”Javascript对象构造函数(new())?

时间:2013-07-25 17:12:33

标签: 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();但它丢失了有关Service接口的类型信息。

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

1 个答案:

答案 0 :(得分:1)

选项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;