我有以下设置:
// enums.ts
export enum DocumentType {
Email = 0,
Unknown = 1
}
-
// remote.ts
/// <reference path="./remote.d.ts" />
import enums = require('./enums');
class Remote implements test.IRemote {
public docType: enums.DocumentType;
constructor() {
this.docType = enums.DocumentType.Unknown;
}
}
export = Remote;
-
// remote.d.ts
import * as enums from './enums';
declare module test {
export interface IRemote {
docType: enums.DocumentType;
}
}
但是当我运行tsc时,我从remotes.ts获得Cannot find namespace 'test'
。我错过了什么?
其他可能有用的信息:我最近从Typescript 1.5升级到了Typescript 1.8,并在示例中将const枚举替换为普通枚举。
答案 0 :(得分:1)
您还需要从remote.d.ts
导出内部模块:
<强> remote.d.ts 强>
import * as enums from './enums';
export declare module test {
export interface IRemote {
docType: enums.DocumentType;
}
}
这是因为你有外部模块remote
(当有顶级import
或export
语句时,文件本身就是模块),从哪个类型和其他符号在导出时可用,就像从模块IRemote
导出test
的方式一样。
换句话说,外部模块内部有一个内部模块,但不会导出内部模块。此外,IRemote接口实际上是双重包装的,并且有资格获得全名remote.test.IRemote
。
注意:IMO,在同一项目中混合内部模块和外部模块可能会导致许多问题和不便,如果您不小心,因此应尽可能避免。
答案 1 :(得分:1)
在我的Universe Cannot find namespace
中,错误是CLI服务,重新启动npm watcher后消失了。