I’m trying out typescript for the first time and am confused about the import/export procedures that I am used to using with es6.
this is an interface I am trying to export in a file called transformedRowInterface.ts
:
export interface TransformedRow { id: number; title: string; summary: string; body: string; synopsis: string; author: object; impressions: number; created: number; updated: number; }
and this is my attempt to import, in a file called newsArticleModel.ts
:
const appRoot = require("app-root-path"); import { TransformedRow } from "./transformedRowInterface"; //throws the error below: // [Node] /newsArticleModel.ts:2 // [Node] import { TransformedRow } from "./transformedRowInterface"; //SyntaxError: Unexpected token import // also tried a require below, which also throws an error: // const transformedRow = require(appRoot + "/src/controllers/transformedRowInterface.ts"); // throws this error: // [Node] (function (exports, require, module, __filename, __dirname) { export interface TransformedRow { // [Node] ^^^^^^ // [Node] // [Node] SyntaxError: Unexpected token export
this is my tsconfig:
{ "compilerOptions": { "module": "commonjs", "target": "es2017", "noImplicitAny": false, "moduleResolution": "node", "sourceMap": true, "outDir": "dist", "baseUrl": ".", "paths": { // "*": ["node_modules/*", "src/types/*"] } }, "include": ["src/**/*"] }
What am I doing wrong?
Advertisement
Answer
I’m pretty sure this is because you are targeting ES2017
, which supports the syntax for imports “out of the box”, i.e. your output would literally contain
import { thing } from './wotsit';
If your runtime doesn’t support this kind of import, you will need to use down-level compilation (i.e. target ES5) so the import gets converted into the CommonJS require call.
You can test my theory by looking at the JavaScript output to see what the import looks like.