2013-04-17 59 views
0

如果我在一個文件中定義一個typedef,例如:我可以跨源文件共享typedefs(Google Closure)嗎?

/** 
* @typedef {{ 
* prop1: string, 
* prop2: number 
* }} 
*/ 
myClass.typedef; 

我可以跨文件共享呢?我不想在每個文件中聲明相同的typedef。

我試圖在定義它的文件中做goog.provide('myClass.typedef');,並在需要使用它的其他文件中使用goog.require('myClass.typedef');。但是我得到一個錯誤「goog.require找不到myClass.typedef」。我相信提供/要求一般工作爲goog.provide('myClass');goog.require('myClass');正在爲相同的兩個文件工作。

什麼是正確的方法來做到這一點?

+0

只是爲了理智的緣故,是完全錯誤「 goog.require無法找到my.typedef「而不使用」myClass.typedef「或那是縮寫嗎? – ne8il

+0

我的錯別字。錯誤說「myClass.typeDef」。固定在原來的。 – Brendan

回答

0

是的,typedefs是可共享的,但您需要deps系統中包含和需要的其他文件。 在你使用typedefs之前,我建議你閱讀下面的內容: http://closuretools.blogspot.co.uk/2012/02/type-checking-tips.html

+0

我相信我已經這樣做了。正如我在文章中提到的,goog.provide('myClass')和goog.require('myClass')工作正常,只是產生錯誤的typeDef。 – Brendan

+0

我們共享typedefs無任何問題。你爲typedef添加了goog.provide嗎?在任何情況下建議不要使用typedefs。 – lennel

0

你只能goog.require已經goog.provide-ed的東西。

要麼goog.require類與其上設置的類型,要麼創建另一個類,如MyClassTypes,並設置它的類型 例如, goog.provide('MyClass');

MyClass = function() {}; 

/** 
* @typedef {{ 
* prop1: string, 
* prop2: number 
* }} 
*/ 
MyClass.type1; 

goog.provide('MyClassTypes'); 

MyClassTypes = function() {}; 

/** 
* @typedef {{ 
* prop1: string, 
* prop2: number 
* }} 
*/ 
MyClassTypes.type1; 

和需要的typedef在文件中...

goog.require('MyClass'); 

goog.require('MyClassTypes'); 
相關問題