2016-03-19 15 views
0

Closure Compiler, ADVANCED_OPTIMIZATIONS'u kullanarak derlediğimde garip bir uyarı veriyor. Bütün değiştirdiğinizdeClosure Compiler - @extends etiketinde özümlenemedi

WARNING - Could not resolve type in @extends tag of IRegistration 
function IRegistration() { 
^ 
0 error(s), 1 warning(s) 

Ama: @interface

// ==ClosureCompiler== 
// @output_file_name default.js 
// @compilation_level ADVANCED_OPTIMIZATIONS 
// ==/ClosureCompiler== 

/** 
* @interface 
* @extends {IReused} 
*/ 
function IRegistration() { 
} 

/** 
* @interface 
*/ 
function IInitializable() { 
} 

/** 
* @param {IReused} initializer 
*/ 
IInitializable.prototype.initializedBy = function (initializer) { }; 

/** 
* @interface 
* @extends {IOwned} 
*/ 
function IReused() { 
} 


/** 
* @interface 
*/ 
function IOwned() { 
} 

Çıktı - Ben arayüzlerini kullanarak bu kod derleme

Sen Closure Compiler UI

görebiliyorum bir uyarı vardır @constructor kullanarak sınıflara arabirimler sadece çalışır. Ben initializedBy dan IReused parametresini kaldırdığınızda arayüzleri kullanırken

// ==ClosureCompiler== 
// @output_file_name default.js 
// @compilation_level ADVANCED_OPTIMIZATIONS 
// ==/ClosureCompiler== 

/** 
* @constructor 
* @extends {IReused} 
*/ 
function IRegistration() { 
} 

/** 
* @constructor 
*/ 
function IInitializable() { 
} 

/** 
* @param {IReused} initializer 
*/ 
IInitializable.prototype.initializedBy = function (initializer) { }; 

/** 
* @constructor 
* @extends {IOwned} 
*/ 
function IReused() { 
} 


/** 
* @constructor 
*/ 
function IOwned() { 
} 

Ayrıca her şeyin beklendiği gibi çalışır çalışmaz.

/** 
* @interface 
* @extends {IReused} 
*/ 
function IRegistration() { 
} 
... 


/** 
* @param {IReused} initializer 
*/ 
IInitializable.prototype.initializedBy = function (initializer) { }; 

To -> 

/** 
* @param {*} initializer 
*/ 
IInitializable.prototype.initializedBy = function (initializer) { }; 

Birisi bana neyi yanlış yaptığımı açıklayabilir mi lütfen?

+0

al sen türleri:

Ayrıca, bu kod neye benzediği. –

+0

İhtiyaç olmayan referanslarla ne demek istiyorsun? bir örnek verebilir misin? – Sagi

cevap

1

Sorun, IReused ve IOwned tanımlanmış olduktan sonra, IRegistration içinde kullanıldığından.

Yalnızca bu deklarasyonları yukarı taşırsanız, gayet iyi çalışır. Derleyici UI here'da buna bakın. İleri referanslar gerekli değildir

// ==ClosureCompiler== 
// @output_file_name default.js 
// @compilation_level ADVANCED_OPTIMIZATIONS 
// ==/ClosureCompiler== 

/** 
* @interface 
*/ 
function IOwned() { 
} 

/** 
* @interface 
* @extends {IOwned} 
*/ 
function IReused() { 
} 


/** 
* @interface 
* @extends {IReused} 
*/ 
function IRegistration() { 
} 

/** 
* @interface 
*/ 
function IInitializable() { 
} 

/** 
* @param {IReused} initializer 
*/ 
IInitializable.prototype.initializedBy = function (initializer) { }; 
+0

Ayrıca kodunuzdan ileri bildirimler oluşturabilir ve arayüzlerin bildirimlerini yukarı taşımak mümkün değilse derleyiciye bunu sağlayabilirsiniz. – codebreach

+0

Yorumunuz için teşekkürler. Fakat bu konunun neden sadece arayüzleri kullandığım ve sınıfları kullanmadığım zaman ortaya çıktığını anlamıyorum. – Sagi

+0

Dürüst olmak gerekirse neden emin değilim, ancak arayüzlerin ve sınıfların nasıl uygulandığıyla ilgili bir şey olduğunu varsayalım. Arabirimler daha statik olarak denetlenebilir ve daha önce derleyici sınıfından daha geç geçer. Kapatma-derleyici google grubu veya github repo uzmanları muhtemelen daha bilinçli bir cevap verebilir. – codebreach

İlgili konular