Last updated: Feb 27, 2024
Reading timeยท3 min
To import a JSON file in TypeScript:
resolveJsonModule
to true
in your tsconfig.json
file.esModuleInterop
to true
in tsconfig.json
.import employee from './employee.json'
.resolveJsonModule
and esModuleInterop
to true
in your tsconfig.json
file.{ "compilerOptions": { // ... other options "esModuleInterop": true, "resolveJsonModule": true } }
Here is the JSON file we will import into a TypeScript file.
{ "id": 1, "name": "Bobby Hadz", "salary": 50, "years": [2022, 2023, 2024] }
And here is how we import the JSON file into an index.ts
file.
import employee from './employee.json'; // ๐๏ธ "BOBBY HADZ" console.log(employee.name.toUpperCase()); // ๐๏ธ [2022, 2023, 2024] console.log(employee.years);
Make sure to correct the path to the employee.json
file if you have to.
The example above assumes that the employee.json
file and index.ts
are
located in the same directory.
For example, if your employee.json
file was one directory up, you would import
it as import employee from '../employee.json'
.
moduleResolution
to node
in your tsconfig.json
fileIf you get an error, try setting moduleResolution
to node
in your
tsconfig.json file.
{ "compilerOptions": { // ... other settings "moduleResolution": "node", "esModuleInterop": true, "resolveJsonModule": true } }
You should also make sure that the JSON file you are importing is located under your rootDir.
rootDir
setting in my tsconfig.json
is set to src
. Therefore the json
file I am importing has to be located under the src
directory.If your json
file is not under your rootDir
, you will get an error: "File
is not under 'rootDir'. 'rootDir' is expected to contain all source files.".
If you are still unable to import the JSON file, try importing it as follows.
import * as employee from './employee.json'; // ๐๏ธ "BOBBY HADZ" console.log(employee.name.toUpperCase()); // ๐๏ธ [2022, 2023, 2024] console.log(employee.years);
The
esModuleInterop
option is set to false
by default, which causes it to treat CommonJS modules
similar to ES6 modules. This causes some issues.
Setting esModuleInterop
to true
fixes these issues.
The
resolveJSONModule
option allows us to import modules with .json
extension in our TypeScript
files.
The resolveJSONModule
option is set to false
by default, so make sure to set
it to true
in your tsconfig.json
file.
If the option is set to false
, you will get an error - "Cannot find module
'./employee.json'. Consider using '--resolveJsonModule' to import module with
'.json' extension.ts(2732)".
import
based on the static JSON shape and enables autocomplete in your IDE.The rootDir option points to the longest common path of all non-declaration input files.
The setting enforces that all files that need to be emitted are under the
rootDir
path. Therefore your .json
file has to be under the specified
rootDir
for the import to work.
I've also written a detailed guide on how to import values from another file in TS.
If you need to specify different types for the imported JSON object, use a type assertion.
import emp from './employee.json'; type Employee = { id: number; name: string; salary: number; years: number[]; }; const employee = emp as Employee; console.log(employee.id); console.log(employee.name); console.log(employee.salary); console.log(employee.years);
Type assertions are used when we have information about the type of a value that TypeScript can't know about.
The employee
variable is now of type Employee
, so we can access all
properties an Employee
has on the variable.
You can learn more about the related topics by checking out the following tutorials: