2016-03-02 114 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外,我沒有對上述代碼進行其他更改。 –

相關問題