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-typescripty@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.