Rollup-plugin-typescript2: Encadeamento opcional falhando com "target": "esnext" em tsconfig

Criado em 15 nov. 2019  ·  7Comentários  ·  Fonte: ezolenko/rollup-plugin-typescript2

O que acontece e porque está errado

https://github.com/brandon-leapyear/rollup-optional-chaining-repro

Copiado do README:

yarn rollup -c

Remova o comentário da linha "target": "esnext" em tsconfig.json para mostrar o erro:

index.ts: (3:57)
[!] Error: Unexpected token (Note that you need plugins to import files that are not JavaScript)
index.ts (3:57)
1: import React from 'react'
2: 
3: const a: { b?: string } = {}
                               ^
4: 
5: export default () => <span>{a?.b}</span>
Error: Unexpected token (Note that you need plugins to import files that are not JavaScript)
    at error (/Users/bchinn/Desktop/rollup-example/node_modules/rollup/dist/rollup.js:5351:30)
    at Module.error (/Users/bchinn/Desktop/rollup-example/node_modules/rollup/dist/rollup.js:9643:9)
    at tryParse (/Users/bchinn/Desktop/rollup-example/node_modules/rollup/dist/rollup.js:9552:16)
    at Module.setSource (/Users/bchinn/Desktop/rollup-example/node_modules/rollup/dist/rollup.js:9868:33)
    at /Users/bchinn/Desktop/rollup-example/node_modules/rollup/dist/rollup.js:12148:20
    at async Promise.all (index 0)
    at async Promise.all (index 0)
    at async Promise.all (index 0)

Parece ser um bug de rollup-plugin-typescript2 porque com "target": "esnext"
não comentado, yarn tsc --noEmit ainda funciona (por exemplo, o Typescript o analisa bem).

Ambiente

Não deve ser relevante

Versões

  • datilografado: mais recente
  • acúmulo: mais recente
  • rollup-plugin-typescript2: mais recente

rollup.config.js

import typescript from 'rollup-plugin-typescript2'

export default {
  input: 'index.ts',
  output: [
    {
      file: 'dist/index.js',
      format: 'es',
    },
  ],
  plugins: [
    typescript({
      typescript: require('typescript'),
    })
  ],
}

tsconfig.json

{
  "compilerOptions": {
    "allowSyntheticDefaultImports": true,
    "jsx": "react",

    // Uncomment to break:
    // "target": "esnext",
  }
}

package.json

{
    "name": "rollup-optional-chaining-repro",
    "version": "0.0.1",
    "private": true,
    "devDependencies": {
        "rollup": "^1.27.0",
        "rollup-plugin-typescript2": "^0.25.2"
    },
    "dependencies": {
        "typescript": "^3.7.2"
    }
}

saída do plugin com detalhamento 3

plugin-debug.txt

Todos 7 comentários

O texto datilografado transpila a?.b para (_a = a) === null || _a === void 0 ? void 0 : _a.b quando es2015 (padrão) é usado.

Ele transpila a?.b para a?.b quando esnext é usado. Eu acho que este é um recurso nativo de JS em esnext,

O erro que você vê é o rollup falhando ao analisar isso. (não tenho certeza se eles devem apoiá-lo ou não).

Você pode verificar executando tsc , fazendo com que ele emita index.js e usando o arquivo js como entrada de rollup. Você deve obter o mesmo erro.

Não acho que seja o caso. Após descomentar "target": "esnext" e executar yarn tsc index.ts , index.js contém:

var _a;
var a = {};
console.log((_a = a) === null || _a === void 0 ? void 0 : _a.b);

( yarn rollup -c ainda falha)

Hm, não acontece para mim, eu entendo

const a = {};
console.log(a?.b);

Verifique se a sua versão datilografada é o que você pensa que é (talvez o yarn lance a versão global?):

.\node_modules\.bin\tsc --version
Version 3.7.2

Tenho o mesmo problema com o destino "esnext" e o encadeamento opcional. Existe uma correção ainda? Tudo compila com tsc

@ dagda1 este não é um bug - este é um

@ezolenko ainda é o caso em que os plug-ins extras do babel são necessários para rollup e encadeamento opcional?

Pelo que eu sei, sim, você pode tentar a versão mais recente do rollup e ver se funciona (se algo for corrigido, seria no lado do rollup ou em uma de suas dependências).

Esta página foi útil?
0 / 5 - 0 avaliações