如何访问具有与我的TypeScript类类似的命名空间的JavaScript属性?

时间:2015-10-13 23:21:57

标签: typescript

在我的网页JavaScript中,有一些服务器生成的代码来设置API网址:

Module.Web.Page = { CoreApiUrl: "http://server/apiCore/" };

我已经创建了一个在TypeScript中显示状态机的类,并且我使用的是我团队其他成员正在使用的相同名称空间。作为旁注,这段代码将从其他地方的TypeScript和JavaScript代码中调用。

module Module.Web {
    export class StateMachine {
        private stateMachineUrl: string;
        constructor() {
            this.stateMachineUrl = Module.Web.Page.CoreApiUrl + "loadstatemachine"
        }
    }
}

但TypeScript编译器并不喜欢它:Property 'Page' does not exist on type 'typeof Web'.我尝试过声明接口,但这并不能解决编译错误。

declare module Module.Web {
    interface Page {
        CoreApiUrl : string;
    }
}

我已尝试将接口声明放在StateMachine类定义旁边,但这并没有修复它:

module Module.Web {
    interface Page {
        CoreApiUrl : string;
    }
    export class StateMachine {
        // same as before
    }
}

如何在Zod 接受Module.Web.Page.CoreApiUrl的存在而不抱怨的情况下,让TypeScript编译器下跪?看起来主要问题是JavaScript属性和TypeScript类都是同一对象的不同属性。

1 个答案:

答案 0 :(得分:0)

  

接受Module.Web.Page.CoreApiUrl的存在而不抱怨

您的尝试:

declare module Module.Web {
    interface Page {
        CoreApiUrl : string;
    }
}

仅当变量 Module.Web.Page Module.Web.Page 时才有效。情况可能并非如此,您需要声明变量+ type:

declare module Module.Web {
    interface PageType {
        CoreApiUrl : string;
    }
    export var Page:PageType;
}