Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Express not working with Typescript in NodeJS app

I'm learning Typescript, and I have followed a tutorial using it with and express api app verbatim but I get the following error:

D:\Development\Node\Ed\TypeScript\src\app.ts:5
const app: Application = express();
                                ^
TypeError: express_1.default is not a function
    at Object.<anonymous> (D:\Development\Node\Ed\TypeScript\src\app.ts:5:33)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
    at Module.m._compile (D:\Development\Node\Ed\TypeScript\node_modules\ts-node\src\index.ts:814:23)
    at Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Object.require.extensions.(anonymous function) [as .ts] (D:\Development\Node\Ed\TypeScript\node_modules\ts-node\src\index.ts:817:12)   
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
    at main (D:\Development\Node\Ed\TypeScript\node_modules\ts-node\src\bin.ts:226:14)

I have no idea how to fix and would appreciate any directions

app.ts file:

import express, { Application, Request, Response, NextFunction } from 'express';

const app: Application = express();

app.get('/', (req: Request, res: Response, next: NextFunction) => {
    res.send('hello');
});

app.listen(5000, () => console.log('Server running'));

tsconfig.json:

{
  "compilerOptions": {
    "target": "es6",                          /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', or 'ESNEXT'. */
    "module": "commonjs",                     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
    "outDir": "./dist",                        /* Redirect output structure to the directory. */
    "rootDir": "./src",                       /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
    "removeComments": true,                /* Do not emit comments to output. */
    "moduleResolution": "node",            /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
    "allowSyntheticDefaultImports": true,  /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
  }
}
like image 745
CaptRisky Avatar asked Sep 04 '26 00:09

CaptRisky


1 Answers

You need change the way you have imported the files. It should be:

import * as express from "express"; 
import { Application, Request, Response, NextFunction } from 'express';
like image 185
Ankita Kuchhadiya Avatar answered Sep 06 '26 18:09

Ankita Kuchhadiya



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!