TypeError: Super expression doit être null ou une fonction, et non pas défini avec Babeljs
Je suis en train d'essayer de faire de multiples fichiers de l'héritage dans l'ES6, avec node.JS et Babel (je suis à l'aide de Babel pour convertir le code de l'ES6 pour ES5 " cause Nœud de ne pas mettre en œuvre ES6).
Je suis à l'aide d'import/export à "lier" les différents fichiers.
En fait, j'ai :
Classe Parent (Fichier 1)
export class Point
{
constructor(x, y)
{
this.x = x;
this.y = y;
}
toString() {
return '(' + this.x + ', ' + this.y + ')';
}
}
Et :
Enfant De La Classe (Fichier 2)
import Point from './pointES5'
export class ColorPoint extends Point
{
constructor(x, y, color)
{
super(x, y);
this.color = color;
}
toString() {
return super.toString() + ' in ' + this.color;
}
}
Et les principaux
Principal (Fichier 3)
import Point from './pointES5'
import ColorPoint from './colorpointES5'
var m_point = new Point();
var m_colorpoint = new ColorPoint();
console.log(m_point.toString());
console.log(m_colorpoint.toString());
Je suis doin' que pour tester les méthodes toString() des appels de méthodes, de Parent et d'Enfant.
Donc, puis-je utiliser Babel pour convertir le code de l'ES6 à l'ES5 et je exécuter chacune des parties séparément pour tester si c'est ok ou pas.
- Point (la Mère) est bon, et de l'exécuter sans erreur.
- ColorPoint (l'Enfant) ne pas exécuter complètement et de le jeter :
TypeError: Super expression doit être null ou une fonction, et non pas défini
La première ligne de la StackTrace :
fonction _inherits(sous-classe, super-classe) { if (typeof super !== 'fonction' && super !== null) { throw new exception TypeError ("Super expression doit être null ou une fonction, et non pas" + typeof super-classe); } la sous-classe.prototype = Objet.créer(super-classe && super-classe.prototype { constructor: { valeur: sous-classe, énumérable: false, l'écriture: c'est vrai, configurable: true } }); if (super-classe) de l'Objet.setPrototypeOf ? Objet.setPrototypeOf(sous-classe, super-classe) : sous-classe.proto = super-classe; }
(Il vient de l'ES5 code converti (Babelified), et je peux le poster totalement si c'est nécessaire).
C'est frustrant cause ce code est très simple...
Mais je ne vois pas quelle est l'origine de l'erreur.
J'ai essayer différentes versions de Babel (5, 5.8, 6), mais il n'y a pas de différences...
Qu'ai-je fait de mal ?
PS : j'ai oublié de dire : il FONCTIONNE PARFAITEMENT lorsque je fais cela dans un seul fichier. Mais c'est vraiment important pour moi d'avoir une seule classe par fichier...
OriginalL'auteur Aethyn | 2016-03-03
Vous devez vous connecter pour publier un commentaire.
À l'exportation, ne correspond pas à votre importation:
Vous êtes à l'exportation d'un nommé symbole, mais l'importation par défaut, de sorte que vous obtiendrez le mauvais objet que
Point
dans votre deuxième fichier.Vous pouvez soit utiliser:
dans le premier fichier de la classe ou
dans le deuxième fichier pour récupérer le droit de référence. Si vous allez pour la classe unique-par-fichier de mise en page, je vous suggère de l'ancien. Vous serez généralement un seul de la classe à être exportés, il est donc logique d'avoir comme valeur par défaut.
Ce que vous avez maintenant, c'est l'équivalent de:
Dans le cas que vous êtes à l'aide de webpack pour le regroupement, je recommande d'utiliser la deuxième approche proposée par @ssube qui profitent de webpack de 2,0 arbre de secousse pour des fins de performances: 2ality.com/2015/12/webpack-tree-shaking.html
OriginalL'auteur ssube