2

我正在开发一个将类型注释(.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 中处理这种情况?

4

1 回答 1

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;
于 2013-07-25T17:51:03.737 回答