He estado usando Svelte, TypeScript y Rollup (dejando que TypeScript maneje la transpilación) para apuntar a ES7. Ahora estoy comenzando un nuevo proyecto y necesito apuntar a ES5.
Lo primero que noté es que todo se transpila pero los componentes siguen siendo clases. No tenía ninguna secuencia de comandos en los componentes en ese momento. Una vez que agregué una etiqueta de secuencia de comandos al archivo .svelte, inmediatamente recibí el error:
Svelte solo admite la sintaxis es6+. Configure su 'compilerOptions.target' en 'es6' o superior
Entiendo que tendré que establecer el objetivo de TS en ES6/ES7 e instalar el complemento Rollup Babel para manejar la transpilación a ES5. Pero, ¿por qué no funcionaría la transpilación simple de TypeScript? ¿Por qué a Svelte le importa el destino de TypeScript? Uno pensaría que los archivos Svelte se convierten a TS antes de transpilarse a ES5, pero parece que es al revés.
El compilador Svelte opera en JS, cualquier otro idioma se procesa previamente para convertirse en JS; de lo contrario, el compilador Svelte tendría que lidiar con muchos idiomas diferentes. Además, no puede simplemente convertir JS en TS, TS tiene más información que JS, no hay forma de recuperar esa información.
Si su resultado final debe ser ES5, probablemente necesite una línea de pila de varios pasos:
TS => JS 6+ =Svelte=> JS 6+ => JS 5