Estoy intentando llamar a super
en un método de instancia de una clase de estilo ES6, y obtengo errores de compilación de paquete/babel.
@parcel/transformer-babel: 'super' is only allowed in object methods and classes. (1291:21)
Mi código efectivamente se ve así
class BaseClass { constructor(params) { this.params = params; } matches(other) { // do some matching logic return true; // or false } } class MyClass extends BaseClass { matches(other) { let match = super.matches(other); // do some additional matching logic return true; // or false } }
El error es cuando llamo a super.matches(other)
en MyClass
.
Toda la documentación que puedo encontrar en super
habla sobre su uso en constructor
, lo cual está bien, y su uso en métodos static
, pero no he encontrado ninguna mención de métodos de instancia.
¿Esto simplemente no funciona en JS, lo estoy haciendo mal o tiene algo que ver con el transformador o paquete de babel?
Parcel v2 admite la transpilación de sintaxis de clase es6 de forma predeterminada mediante swc
. Un "gotcha" es que si detecta un archivo .babelrc
/ babel.config.json
en su proyecto, cambiará a transpilar usando babel, y luego depende de usted asegurarse de que la configuración que proporcionó transpilará las clases.
Según los documentos :
si solo usa
@babel/preset-env
,@babel/preset-typescript
y@babel/preset-react
, es posible que Babel ya no sea necesario. Parcel admite todas estas funciones automáticamente sin una configuración de Babel, y el transpilador predeterminado de Parcel es mucho más rápido que Babel.
Entonces, lo primero que intentaría es eliminar cualquier .babelrc
/ babel.config.json
en su proyecto para que pueda probarlo con swc
. Si eso no funciona (tal vez porque está haciendo otra cosa que swc
no admite), asegúrese de que @babel/preset-env
esté incluido en su configuración de babel.