找不到命名空间错误

时间:2016-03-02 09:39:15

标签: typescript

我有以下设置:

// 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枚举替换为普通枚举。

2 个答案:

答案 0 :(得分:1)

您还需要从remote.d.ts导出内部模块:

<强> remote.d.ts

import * as enums from './enums';

export declare module test {
    export interface IRemote { 
        docType: enums.DocumentType;
    } 
}

这是因为你有外部模块remote(当有顶级importexport语句时,文件本身就是模块),从哪个类型和其他符号在导出时可用,就像从模块IRemote导出test的方式一样。

换句话说,外部模块内部有一个内部模块,但不会导出内部模块。此外,IRemote接口实际上是双重包装的,并且有资格获得全名remote.test.IRemote

注意:IMO,在同一项目中混合内部模块和外部模块可能会导致许多问题和不便,如果您不小心,因此应尽可能避免。

答案 1 :(得分:1)

在我的Universe Cannot find namespace中,错误是CLI服务,重新启动npm watcher后消失了。