Do not report esModuleInterop needed error for json imports

Fixes #25400
This commit is contained in:
Sheetal Nandi 2018-07-05 10:39:39 -07:00
parent 50ef631b59
commit cb622b413b
5 changed files with 64 additions and 1 deletions

View file

@ -2268,7 +2268,7 @@ namespace ts {
function resolveESModuleSymbol(moduleSymbol: Symbol | undefined, referencingLocation: Node, dontResolveAlias: boolean): Symbol | undefined {
const symbol = resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias);
if (!dontResolveAlias && symbol) {
if (!(symbol.flags & (SymbolFlags.Module | SymbolFlags.Variable))) {
if (!(symbol.flags & (SymbolFlags.Module | SymbolFlags.Variable)) && !getDeclarationOfKind(symbol, SyntaxKind.SourceFile)) {
error(referencingLocation, Diagnostics.Module_0_resolves_to_a_non_module_entity_and_cannot_be_imported_using_this_construct, symbolToString(moduleSymbol!));
return symbol;
}

View file

@ -0,0 +1,19 @@
//// [tests/cases/compiler/requireOfJsonFileWithoutEsModuleInterop.ts] ////
//// [file1.ts]
import * as test from "./test.json"
//// [test.json]
{
"a": true,
"b": "hello"
}
//// [out/test.json]
{
"a": true,
"b": "hello"
}
//// [out/file1.js]
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });

View file

@ -0,0 +1,12 @@
=== tests/cases/compiler/file1.ts ===
import * as test from "./test.json"
>test : Symbol(test, Decl(file1.ts, 0, 6))
=== tests/cases/compiler/test.json ===
{
"a": true,
>"a" : Symbol("a", Decl(test.json, 0, 1))
"b": "hello"
>"b" : Symbol("b", Decl(test.json, 1, 14))
}

View file

@ -0,0 +1,16 @@
=== tests/cases/compiler/file1.ts ===
import * as test from "./test.json"
>test : { "a": boolean; "b": string; }
=== tests/cases/compiler/test.json ===
{
>{ "a": true, "b": "hello"} : { "a": boolean; "b": string; }
"a": true,
>"a" : boolean
>true : true
"b": "hello"
>"b" : string
>"hello" : "hello"
}

View file

@ -0,0 +1,16 @@
// @module: commonjs
// @moduleResolution: node
// @target:es2017
// @strict: true
// @resolveJsonModule: true
// @outdir: out/
// @fullEmitPaths: true
// @Filename: file1.ts
import * as test from "./test.json"
// @Filename: test.json
{
"a": true,
"b": "hello"
}