typescript - Hur tar man bort det mystiska "default"-fältet som lagts till i JSON?
Jag har följande jsondata.json-fil:
{
"name": "John",
"age": 30,
"car": "ferrari"
}
I samma katalog har jag en TypeScript-fil main.ts där jag helt enkelt congole.log JSON från jsondata.json
import * as j from './jsondata.json';
console.log(j);
Resultatet är överraskande:
{
name: 'John',
age: 30,
car: 'ferrari',
default: { name: 'John', age: 30, car: 'ferrari' }
}
Vad är det där default-fältet? Varför dyker det upp, och hur kan jag bli av med det?
Som referens, detta är min tsconfig.json
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"sourceMap": true,
"outDir": "./out",
"strict": true,
"moduleResolution": "node",
"esModuleInterop": true,
"resolveJsonModule": true,
"forceConsistentCasingInFileNames": true
}
}
Svar #1
Jag provade några kombinationer av inställningarna och upptäckte att de två sista inställningarna är det önskade beteendet.
jsondata.json:
{
"name": "John",
"age": 30,
"car": "ferrari2"
}
resolveJsonModule satt till true och ingen esModuleInterop och import utan * import orsakar fel.
main.ts:
import j from './jsondata.json';
console.log(j);
tsconfig.ts:
"resolveJsonModule": true,
// "esModuleInterop": true
resultat :
>
{ name: 'John', age: 30, car: 'ferrari2' }
Module ... can only be default-imported using the 'esModuleInterop' flag
Båda flaggorna är inställda på true och * import visar standard
main.ts:
import * as j from './jsondata.json';
console.log(j);
tsconfig.ts
"resolveJsonModule": true,
"esModuleInterop": true
resultat :
>
{
name: 'John',
age: 30,
car: 'ferrari2',
default: { name: 'John', age: 30, car: 'ferrari2' }
}
Båda flaggorna inställda på sant utan *-import visar inte standard
main.ts:
import j from './jsondata.json';
console.log(j);
tsconfig.ts:
"resolveJsonModule": true,
"esModuleInterop": true
resultat :
>
{ name: 'John', age: 30, car: 'ferrari2' }
resolveJsonModule satt till true och ingen esModuleInterop och *-import visar ingen default
main.ts:
import * as j from './jsondata.json';
console.log(j);
tsconfig.ts:
"resolveJsonModule": true,
// "esModuleInterop": true
resultat :
>
{ name: 'John', age: 30, car: 'ferrari2' }
Svar #2
Bara ifall någon fortfarande stöter på detta problem. Som nämnts här kan du importera "default"-exporten istället för "*"
import { default as j } from './jsondata.json';
Detta bör åtgärda problemet.
