ES Module导出重命名为非有效标识符字符串字面量:报错原因与解决
问题解答
核心结论
是的,Node.js支持该ES模块标准语法,但你使用的TypeScript 4.8.4版本暂不支持这种用字符串字面量将导出/导入名称重命名为非有效标识符的写法。
原因分析
- Node.js的支持情况:
export { myFunction as "my-function" }这类语法是ES模块的标准特性,Node.js从v14.x版本开始就已经完整实现,你的v16.15.0版本自然兼容,因此直接运行代码能正常输出结果。 - TypeScript的支持延迟:TypeScript直到5.0版本才正式支持导出/导入时用字符串字面量作为别名的语法,你当前使用的4.8.4版本早于该版本,所以TS会将其判定为语法错误,在VSCode中给出报错提示。
解决办法
方案1:升级TypeScript版本
将TypeScript升级到5.0或更高版本,即可消除VSCode的报错提示,同时保留原有语法:
npm install typescript@latest --save-dev
升级完成后,VSCode的TS语言服务会自动识别该语法,不再报错。
方案2:不升级TS,改用替代写法
如果暂时无法升级TS版本,可以通过以下方式实现导出非有效标识符的需求:
- 导出侧(test.js):
// 方式1:直接导出带特殊字符的变量 export const "my-function" = function myFunction() { return 1; }; // 方式2:通过对象导出 const exportObj = { "my-function": function myFunction() { return 1; } }; export default exportObj;
- 导入侧:
// 对应方式1的导入 import * as test from "./test.js"; console.log(test["my-function"]()); // 对应方式2的导入 import test from "./test.js"; console.log(test["my-function"]());
内容的提问来源于stack exchange,提问作者AKd
相关产品推荐
相关产品推荐

