Angular13+Universal项目server.ts报Express无listen属性TS2339错误如何解决
问题解决方法
这个Property 'listen' does not exist on type 'Express'.ts(2339)错误是因为Typescript没有正确识别Express实例的类型,通常由类型依赖版本不匹配、TS配置缺失导致,按照以下步骤修改即可解决:
- 第一步:安装适配TS4.4的类型依赖
Angular13配套的TS4.4无法兼容高版本的express类型声明,若之前已经安装了高版本的相关类型包,先执行卸载:npm uninstall @types/express @types/node
再安装匹配版本的依赖:npm install --save-dev @types/express@4.17.13 @types/node@16.11.7 - 第二步:调整server.ts中app函数的返回类型
将app函数原来的返回类型标注express.Express修改为express.Application,修改后的代码片段如下:
// 原代码:export function app(): express.Express { export function app(): express.Application { const server = express(); // 函数内其余原有代码保持不变 }
- 第三步:校验服务端TS配置
打开项目根目录下的tsconfig.server.json,确认compilerOptions配置项中的types数组包含node,参考配置如下:
{ "compilerOptions": { "types": ["node"], // 其余原有配置无需修改 } }
- 临时兜底方案
如果以上修改后仍有报错,可直接对server实例做类型断言绕过TS校验,不会影响实际运行效果:
function run(): void { const port = process.env.PORT || 4000; const server = app(); // 对server做类型断言 (server as any).listen(port, () => { console.log(`Node Express server listening on http://localhost:${port}`); }); }
内容的提问来源于stack exchange,提问作者chadoulis
相关产品推荐
相关产品推荐

