我有以下简单的NodeJS代码:
const express = require('express');
const server: express.Application = express();
我正在将Typescript添加到我的项目中,并且是新手,所以请原谅我。通过上面的代码,我得到以下问题/错误:
对于需求:
var require: NodeRequire (id: string) => any (+1 overload)
'require' call may be converted to an import.
用于快递。应用用法:
Cannot find namespace 'express'.
如果我将'require'切换为'import',则会修复名称空间错误,但不再是有效的Node代码,因此无法运行(引发有关导入意外令牌的新错误)。
用Typescript编写这样的Node代码以避免这些错误的正确方法是什么?
我的tsconfig.json看起来像这样:
{
"compilerOptions": {
"allowJs": true,
"allowSyntheticDefaultImports": true,
"alwaysStrict": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"jsx": "preserve",
"lib": ["dom", "es2017"],
"module": "esnext",
"moduleResolution": "node",
"noEmit": true,
"noFallthroughCasesInSwitch": true,
"noImplicitReturns": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"removeComments": true,
"resolveJsonModule": true,
"sourceMap": true,
"strict": true,
"target": "esnext",
},
"exclude": ["node_modules"],
}
答案 0 :(得分:0)
也许您必须使用 import 而不是 require :
import * as express from 'express';
答案 1 :(得分:0)
经过大量时间浪费后,事实证明这是由于tsconfig文件中的module
设置所致:
"module": "commonjs"
这意味着Typescript将输出常见的js模块而不是ES6模块,这意味着该代码将作为NodeJS代码正确运行。因此,我能够更改require import,因为它可以编译。