【问题标题】:String literal expected. when importing in typescript应为字符串文字。在打字稿中导入时
【发布时间】:2018-05-16 20:25:03
【问题描述】:
import * as app from `${process.cwd()}/server`

它给了我错误:

[ts] String literal expected.

导入时不能插入字符串吗?

【问题讨论】:

标签: typescript


【解决方案1】:

这在 ES6 模块或 TypeScript 中是不合法的语法。 ES6 模块规范的一部分是依赖总是静态可解析的。

【讨论】:

    【解决方案2】:

    就我而言,我这样做显然是非法的:

    import { two }, one from "./file";
    

    虽然应该是这样的:

    import one, { two } from "./file";
    

    【讨论】:

      【解决方案3】:

      您正在尝试动态导入一个模块。不幸的是,使用未在运行时分析的 ES6 导入/导出机制是不可能的(目前与 TypeScript 无关)。

      为了动态导入您的模块并避免 tsc 错误,我建议使用 common.js require 机制(允许动态导入):

      const your_module = require(`${process.cwd()}/server`);
      

      请注意,当您的变量不确定为字符串时(与您的模板字符串示例不同),我建议将上述解决方案与 Typescript 类型断言一起使用。这应该是这样的:

      const your_module = require(<string>process.env.myNodeModulePackageName);
      

      编辑:

      在 ES2020 中,import 语句演变为返回一个承诺,支持动态导入。所以如果你愿意使用原生导入机制(而不是 common.js)你应该这样做:

      const your_module = await import (`${process.cwd()}/server`)
      

      (请注意,您的tsconfig.json 文件应配置为:

      "target": "es2017"
      "module": "esnext"

      (也允许您使用top level await

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-26
        • 2017-01-16
        • 2020-04-19
        • 2023-02-09
        • 1970-01-01
        • 1970-01-01
        • 2018-04-28
        • 2021-02-13
        相关资源
        最近更新 更多