2016-03-04 3 views
0

Je suis en train d'utiliser le compilateur de fermeture google (je vais l'appeler compiler pour faire court) à validate codebase JavaScript comme ça:déclaration de type d'exportation en dehors de la fonction

java -jar compiler.jar --js='**.js' --jscomp_error newCheckTypes > NUL 2> gcc.log

La chose est nous avons déjà beaucoup de code dans AMD et taper des annotations écrites pour les modules de base comme ça:

define(function() { 
    /** @constructor */ 
    MyClass() {} 
    /** @param {string} s */ 
    MyClass.prototype.myMethod = function (s) { 
     alert(s); 
    } 
    return MyClass; 
}); 

Je voudrais faire référence au type /** @type {MyClass} */ dans d'autres modules, donc si j'appelle une méthode avec de mauvais arguments, elle se plaindra.

Malheureusement, lorsque j'utilise ces annotations de type, compiler sorties:

Bad type annotation. Unknown type MyClass 
    /** @type {MyClass} */ 

Si je bande hors fonction module delcaring, compiler « comprend » ma déclaration, mais je ne me sens pas comme la réécriture de notre code de cette façon.

Y a-t-il un moyen de faire compiler voir mes déclarations de type et appliquer dans d'autres modules?

Répondre

0

Le compilateur a un --transform_amd_modules qui va réécrire un module AMD à CommonJS. Il ne prend en charge qu'un nombre limité de signatures define et n'est pas largement utilisé ou activement maintenu. Avec les modules CommonJS, vous pouvez utiliser l'indicateur --process_common_js_modules pour réécrire et redéfinir le code en un type global qui peut être vérifié par le compilateur. La fonctionnalité des modules CommonJS est activement maintenue.

+0

Vous proposez donc de transformer des modules en CommonJS, puis d'appeler à nouveau le compilateur en fournissant du code transformé? – kirilloid

+0

Non - tout serait fait en interne au compilateur dans une course. Fournissez simplement les drapeaux '--transform_amd_modules' et' --process_common_js_modules'. –

+0

Je ne m'attendais pas à ce qu'il fonctionne correctement aaand ... ça n'a pas fonctionné. Je vois encore toutes ces erreurs. Ai-je expliqué clairement que je n'ai pas besoin de transformer le code de quelque façon que ce soit? Validez seulement les types comme avec flowtype. – kirilloid