我可以跨源文件共享typedef(Google Closure)吗?

时间:2013-04-17 20:57:30

标签: google-closure

如果我在一个文件中定义一个typedef,例如:

/**
 * @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');适用于相同的两个文件。

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

是的,typedef是可共享的,但是你需要在deps系统中包含和需要的文件中的其他东西。 在使用typedef之前,我建议你阅读: http://closuretools.blogspot.co.uk/2012/02/type-checking-tips.html

答案 1 :(得分: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');