You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript导入用字符串插值报错‘String literal expected’,是否支持该写法?

关于TypeScript import语句中字符串插值的问题解答

没错,你碰到的这个问题是因为TypeScript(遵循ES模块规范)不允许在静态import语句中使用字符串插值,这就是你看到[ts] String literal expected错误的核心原因。

为啥静态import不能用插值?

ES模块的import是静态语法,编译器(不管是TypeScript还是JavaScript引擎)需要在编译/代码解析阶段就明确知道所有要导入的模块路径。这样才能做依赖分析、tree-shaking、静态类型检查这些关键的优化和校验工作。而字符串插值是要到代码运行时才会计算出最终值的,编译器根本没法提前确定你要导入的模块到底是什么,自然就会抛出错误。

那动态路径的需求怎么解决?

如果你的模块路径确实需要根据运行时的变量(比如process.cwd())来动态确定,那应该用ES2020引入的动态导入语法——import()函数。它会返回一个Promise,TypeScript对这个特性支持得很好。

把你的代码改成下面这样就行:

// 要是在async函数里,用await更直观
async function loadServer() {
  const app = await import(`${process.cwd()}/server`);
  // 在这里使用app导出的内容,比如 app.start() 之类的
}

// 也可以用.then()处理异步流程
import(`${process.cwd()}/server`).then((app) => {
  // 处理模块逻辑
});

注意哦,动态导入是异步的,所以必须用异步的方式来处理导入后的模块。

额外提醒

如果你的模块路径不需要动态计算,那还是尽量用静态import,直接写字符串字面量就行:

import * as app from './server';

这样能享受到静态导入的所有好处——比如编译时的类型检查、tree-shaking优化,代码可读性也更强。

内容的提问来源于stack exchange,提问作者Shamoon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:07:21