Typescript: A opção resolveJsonModule não funciona sem esModuleInterop

Criado em 3 jul. 2018  ·  22Comentários  ·  Fonte: microsoft/TypeScript


Versão do TypeScript: 2.9.2, 3.0.0-dev.20180703


Termos de pesquisa:

resolveJsonModule, esModuleInterop

Código

import * as test from './test.json';

tsconfig.json:

{
    "compilerOptions": {
        "module": "commonjs",
        "moduleResolution": "node",
        "target": "es2017",
        "lib": ["es2017"],
        "strict": true,
        "sourceMap": true,
        "noEmitOnError": true,
        "baseUrl": ".",
        "resolveJsonModule": true,
        "outDir": "out"
    }
}

Comportamento esperado:

Sem erros.

Comportamento real:

Erro de compilação:

$ tsc
test.ts:1:23 - error TS2497: Module '"/home/kostya/tmp/resolve-json-test/test"' resolves to a non-module entity and cannot be imported using this construct.

1 import * as test from './test.json';
                        ~~~~~~~~~~~~~

Quando adiciono a opção esModuleInterop a tsconfig.json :

diff --git a/tsconfig.json b/tsconfig.json
index 7f1afb8..e949135 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -9,6 +9,7 @@
         "noEmitOnError": true,
         "baseUrl": ".",
         "resolveJsonModule": true,
+        "esModuleInterop": true,
         "outDir": "out"
     }
 }

e altere a declaração de importação para:

diff --git a/test.ts b/test.ts
index 07bb9b7..dddcffb 100644
--- a/test.ts
+++ b/test.ts
@@ -1 +1 @@
-import * as test from './test.json';
+import test from './test.json';

funciona. Mas com a opção esModuleInterop preciso alterar muitas importações em meu projeto, o que é indesejável.

Link Playground:

Assuntos relacionados:

Bug Fixed

Comentários muito úteis

Depois de definir resolveJsonModule como "true", estava tendo o mesmo problema no VS Code, (TypeScript 3.2.2, VSCode 1.30.1). Reiniciar o VS Code resolveu o problema para mim - não precisei alterar nenhuma outra configuração ts

Todos 22 comentários

Também com resolveJsonModule , mas sem esModuleInterop , o arquivo json aparece no diretório de saída.

Depois de definir resolveJsonModule como "true", estava tendo o mesmo problema no VS Code, (TypeScript 3.2.2, VSCode 1.30.1). Reiniciar o VS Code resolveu o problema para mim - não precisei alterar nenhuma outra configuração ts

Confirmei que definir resolveJsonModule para true em meu tsconfig.json resolveu este problema.

Reiniciar manualmente o VS Code resolve esse problema.

Depois de definir resolveJsonModule como "true", estava tendo o mesmo problema no VS Code, (TypeScript 3.2.2, VSCode 1.30.1). Reiniciar o VS Code resolveu o problema para mim - não precisei alterar nenhuma outra configuração ts

Obrigado, funcionou!

Depois de definir resolveJsonModule como "true", estava tendo o mesmo problema no VS Code, (TypeScript 3.2.2, VSCode 1.30.1). Reiniciar o VS Code resolveu o problema para mim - não precisei alterar nenhuma outra configuração ts

Funcionou para mim também, obrigado!

Depois de definir resolveJsonModule como "true", estava tendo o mesmo problema no VS Code, (TypeScript 3.2.2, VSCode 1.30.1). Reiniciar o VS Code resolveu o problema para mim - não precisei alterar nenhuma outra configuração ts

Isso realmente funcionou. Obrigado 😃

Depois de definir resolveJsonModule como "true", estava tendo o mesmo problema no VS Code, (TypeScript 3.2.2, VSCode 1.30.1). Reiniciar o VS Code resolveu o problema para mim - não precisei alterar nenhuma outra configuração ts

Obrigado, funcionou como um encanto!

Vejo um comportamento semelhante no intellij para o @intelliot descrito acima para o código vs. Obrigado pela sugestão.

Para aqueles que atualizaram sua meta para esnext você precisa adicionar o seguinte ao seu tsconfig :
...
"target": "esnext",
"moduleResolution": "node",
...

Inicialmente, após uma reinicialização, o arquivo fica verde e, 3 segundos depois, destacado em vermelho novamente. Portanto, reiniciar no meu caso não resolve esse problema.

@chrisj-skinner o mesmo comigo. Não sei porquê isso está acontecendo.

Por que esse problema está fechado, já que ele ainda existe?

eu tenho

    "esModuleInterop": true,
    "resolveJsonModule": true,
    "moduleResolution": "node",

e
const pkgJSON = require('../../package.json');

- Consider using '--resolveJsonModule' to import module with '.json' extensionts(2732)

Eu já uso resolveJsonModule.

Se você usar o WebStorm, você também deve reiniciar.

Eu tenho o mesmo problema aqui,

Inicialmente, após uma reinicialização, o arquivo fica verde e, 3 segundos depois, destacado em vermelho novamente. Portanto, reiniciar no meu caso não resolve esse problema.

Inicialmente, após uma reinicialização, o arquivo fica verde e, 3 segundos depois, destacado em vermelho novamente. Portanto, reiniciar no meu caso não resolve esse problema.

Eu tive o mesmo problema, mas isso porque eu esqueci de incluir a nova pasta / arquivo ts criado no tsconfig.json

Eu tive o mesmo problema, mas isso porque eu esqueci de incluir a nova pasta / arquivo ts criado no tsconfig.json

Mesmo, obrigado mano!

No meu caso: "Arquivo" -> "Invalidar Caches / Reiniciar ..." -> "Invalidar e Reiniciar", resolveu o problema

No meu caso, resolvi isso fazendo:

        "moduleResolution": "node"

Isso também pode resolver o problema:

        "module": "commonjs"

No meu caso, não tenho certeza se isso deve acontecer ou não, mas tive que colocar minhas tsconfig.json no mesmo diretório que minhas pastas out e src .

Embora eu tenha adicionado moduleResolution: node, o erro ainda estava lá. Depois de reiniciar o VS, ele foi 'consertado'

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

Questões relacionadas

uber5001 picture uber5001  ·  3Comentários

zhuravlikjb picture zhuravlikjb  ·  3Comentários

MartynasZilinskas picture MartynasZilinskas  ·  3Comentários

bgrieder picture bgrieder  ·  3Comentários

kyasbal-1994 picture kyasbal-1994  ·  3Comentários