2016-03-02 88 views
4

我有以下设置:找不到命名错误

// 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我得到Cannot find namespace 'test'从remotes.ts 。我错过了什么?

其他可能有用的信息:我最近从Typescript 1.5升级到了Typescript 1.8,并用示例中的普通枚举替换了常量枚举的用法。

回答

1

您需要内部模块从remote.d.ts货物出口:

remote.d.ts

import * as enums from './enums'; 

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

这是因为你有外部模块remote(文件本身是模块当存在顶级importexport声明时),在导出时可以使用哪些类型和其他符号,很像从模块test导出IRemote

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


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

+0

如果我在d.ts中添加导出,则会得到相同的错误。如果我改变remote.ts来实现remote.test.IRemote我得到一个错误无法找到命名空间'remote' –

+0

@AndrewJones什么是你的语法来导入'remote.test'? –

+0

我在remote.ts中,接口是在远程.dts中定义的/// ”我什么也没做。除了在remote.d.ts中添加导出,然后在implements语句中添加remote.test.IRemote外,我没有对上述代码进行其他更改。 –

相关问题