命名空间中对外部模块的Typescript引用

命名空间中对外部模块的Typescript引用,typescript,momentjs,typescript-typings,Typescript,Momentjs,Typescript Typings,我试图在我的命名空间“公司.控制器”中引用外部模块“时刻”” namespace company.controllers { import { moment } from 'moment'; 'use strict' export class WidgetAdminDailyStatisticController extends Controller<company.data.AdminDailyStatisticViewModel> {

我试图在我的命名空间“公司.控制器”中引用外部模块“时刻”

namespace company.controllers {    
    import { moment } from 'moment';

    'use strict'

    export class WidgetAdminDailyStatisticController extends Controller<company.data.AdminDailyStatisticViewModel> {
        customRepository: company.data.CustomRepository;
        searchDate: Date;

        static $inject: Array<string> = [
            'CustomRepository'
        ];
        constructor(
            customRepository: company.data.CustomRepository
        ) {
            super();

            this.customRepository = customRepository;
        }

        initialize(): void {
            this.searchDate = new Date();

            //let a: moment = new moment();


        }
    }
}
名称空间company.controllers{
从“矩”导入{moment};
“严格使用”
导出类WidgetAdminDailyStatisticController扩展控制器{
customRepository:company.data.customRepository;
搜索日期:日期;
静态$inject:数组=[
“自定义存储库”
];
建造师(
customRepository:company.data.customRepository
) {
超级();
this.customRepository=customRepository;
}
初始化():无效{
this.searchDate=新日期();
//设a:力矩=新力矩();
}
}
}
我得到“命名空间中的导入声明不能引用模块”


如何导入moment并在我的typescript中使用?

您可以在命名空间之外导入它:

import { moment } from 'moment';

namespace company.controllers {
    // ...
}

。。。但不能在非模块脚本中导入模块。如果您的命名空间不在模块中,则不可能。解决方案是使用矩作为全局变量,并为该全局变量查找(或写入)另一个定义文件。

当我将其移到名称空间之外时,它可以工作。但我在“控制器”上出错了。1.“控制器”下的卷曲线。错误消息:“找不到名称控制器”2。“company.data”下的卷线。错误消息:“命名空间“company”没有导出的成员数据”。这两种方法以前都很好用。不能在非模块脚本中导入模块。如果名称空间不在模块中,则不可能。解决方法是将矩作为全局变量,我找到了一种方法。通过在类型定义文件中注释掉“export=moment”。抱歉,我无法验证您的版本,因为它是针对moment的黑客攻击。你需要的是暂时的休息。我不知道它是否在
时刻存在。通过删除定义文件中的行
export=moment
,可以使定义文件环境化。但这种黑客行为取决于定义文件的编写方式,并且它不是“从名称空间引用外部模块”的通用解决方案。但是,您的解决方案适合您,这是最重要的。:)我的错。正确的术语不是环境术语,而是全局术语。