2013-11-26 65 views
4

我越來越瘋狂使用typescript的繼承。我不知道爲什麼,但它無法解決我想要繼承的課程。繼承TypeScript與導出的類和模塊

lib/classes/Message.class。 TS

///<reference path='./def/lib.d.ts'/> 
///<reference path='./def/node.d.ts'/> 

export module SharedCommunication { 
    export class Message{ 
     // Stuff 
    } 
} 

LIB /類/ ValidatorMessage.class。 TS

///<reference path='./def/lib.d.ts'/> 
///<reference path='./def/node.d.ts'/> 
///<reference path='Message.class.ts'/> 

export module SharedCommunication { 
    export class ValidatorMessage extends Message{ 
     private _errors; 
    }  
} 

消息不能被解決。我也嘗試過SharedCommunication.Message,但它是一樣的。我參考了課程,所以我根本不明白髮生了什麼事情。你有什麼主意嗎?

我試過沒有模塊(兩個類沒有在任何模塊中),但它是一樣的。我需要導出類(和模塊,如果我使用它)從另一個node_module:typescript.api中獲取它們,我使用它加載類並在節點中使用它。

的lib/message.js

var Message = require('./classes/Message.class.ts'); 

module.exports = Message.SharedCommunication.Message; 

這裏有什麼訣竅?因爲我有一個不同的文件夾中的同一個項目的源代碼與繼承工作,沒有模塊或導出。謝謝。

回答

4

ValidatorMessage.class.ts應該是這樣的:

///<reference path='./def/lib.d.ts'/> 
///<reference path='./def/node.d.ts'/> 

import message = require('./Message.class'); 

export module SharedCommunication { 
    export class ValidatorMessage extends message.SharedCommunication.Message { 
     private _errors; 
    } 
} 

它通常是多餘的,在文件的頂層有一個export module因爲文件本身就構成了一個命名空間反正。

Bill在您的其他問題中提到了這一點,但如果您剛開始使用TypeScript,我會再次警告您使用RequireTS - 這聽起來相當不成熟,並且可能引入大量混淆。

+0

是的,沒錯!我在你的答案前幾分鐘就發現了它,但我仍然不明白爲什麼這裏的參考是無用的。 我不太瞭解你關於導出模塊的觀點。我需要將其導出才能訪問其他地方。 我使用typescript.api作爲TypeScript文件加載器,效果很好。我需要它,它和require-typescript不同。 – Vadorequest

+0

我想寫一些關於此的文檔。這無疑是令人困惑的。包含在TypeScript git repo中的樣本很好地顯示了程序結構的一些正常模式。 –

+0

是的,但我的朋友誰是習慣使用TS和已經寫了很多腳本與它不使用*導入*,但只有引用,它運作良好^^感謝您的幫助,我期待TS文檔。 – Vadorequest

1

從mododule聲明取出出口:

module SharedCommunication 
{ 
    export class ValidatorMessage extends message.SharedCommunication.Message 
    { 
     private _errors; 
    } 
}