首页 文章

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

提问于
浏览
0

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

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

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

    你的尝试:

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

    仅当变量 Module.Web.Page 的类型为 Module.Web.Page 时才有效 . 这可能不是这种情况,您需要声明变量类型:

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

相关问题