gpt4 book ai didi

typescript - 如何使用 import 而不是 require 创建 express 应用程序

转载 作者:搜寻专家 更新时间:2023-10-30 21:07:50 25 4
gpt4 key购买 nike

这就是 require 的作用。我们希望它使用 import

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

// TODO Figure out how NOT to use require here.
const express = require('express');
var app: Application = express();

app.get('/', function (req: Request, res: Response) {
res.send('Hello World')
});

app.listen(3000);

我们尝试过的

我们的 tsconfig.json 有 "esModuleInterop": true

尝试#1

import express from 'express';

这给出了这个错误:

"node_modules/@types/express/index"' has no default export.ts

尝试#2

import * as express from 'express';
var app = express();

这给出了不同的错误:

Cannot invoke an expression whose type lacks a call signature. Type 'typeof e' has no compatible call signatures.ts(2349) index.ts(1, 1): Type originates at this import. A namespace-style import cannot be called or constructed, and will cause a failure at runtime. Consider using a default import or import require here instead.

最佳答案

TypeScript 有 special import syntax处理将函数或其他一些自定义对象作为一个整体导出的模块(不是默认导出):

import { Request, Response, Application } from 'express';
import express = require('express');

var app: Application = express();

app.get('/', function (req: Request, res: Response) {
res.send('Hello World')
});

app.listen(3000);

或者,您可以使用 TypeScript 编译器选项来更改导入的模块,以便它们具有默认导出:

// tsconfig.json
{
"compilerOptions": {
"allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
"esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
}
}

并使用此默认导入进行导入:

import express from 'express' 
var app = express();

关于typescript - 如何使用 import 而不是 require 创建 express 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55029813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com