在Node.js中使用TypeScript:如何将import语句转为require语句?
嘿,这两个问题我熟,给你一步步讲清楚!
1. Node.js + TypeScript 下把 import 转成 require 的通用方法
其实如果你的TypeScript项目配置正确,编译时会自动把import转换成require——只要在tsconfig.json里把module设为CommonJS(Node.js默认的模块系统)就行。不过要是你想手动转换或者搞清楚对应关系,这里分几种常见场景:
- 默认导入:比如
import React from 'react',对应的require写法是const React = require('react')。 - 命名导入:比如
import { useState, useEffect } from 'react',对应const { useState, useEffect } = require('react')。 - 带别名的命名导入:就是你第二个问题里的情况,核心是把别名保留在解构赋值里,后面具体说。
- 全部导入为一个对象:比如
import * as lodash from 'lodash',对应const lodash = require('lodash')。 - 仅导入模块(不使用导出):比如
import './setup.js',对应require('./setup.js')。
另外,记得把tsconfig.json里的moduleResolution设为Node、Node16或者NodeNext,这样模块解析逻辑会更贴合Node.js的实际行为。
2. 转换特定 import 语句并解决声明文件报错
先处理转换:你的原代码是 import { transliterate as tr, slugify } from 'transliteration';,对应的require写法非常直接,只要把别名保留在对象解构里就行:
const { transliterate: tr, slugify } = require('transliteration');
接下来解决缺少声明文件的报错——这个问题是TypeScript不知道transliteration模块的类型定义,有两个靠谱的解决办法:
- 安装官方维护的类型声明包:绝大多数流行的npm包都有社区维护的
@types包,你只需要在项目里运行这条命令:
安装完成后,TypeScript就能自动识别模块的类型,报错会立刻消失。npm install @types/transliteration --save-dev - 手动声明模块(如果没有@types包的话):要是找不到对应的
@types包,你可以自己写一个简单的类型声明文件。在项目里新建一个typings文件夹,然后创建transliteration.d.ts文件,内容如下:
最后别忘了在declare module 'transliteration' { export function transliterate(str: string): string; export function slugify(str: string): string; // 要是需要用到其他方法,也可以在这里补充类型定义 }tsconfig.json的include数组里加上这个文件夹,比如:
这样TypeScript就能识别这个模块的类型了。"include": ["src/**/*", "typings/**/*"]
内容的提问来源于stack exchange,提问作者Hoa
相关产品推荐
相关产品推荐

