【问题标题】:tsc won't produce declaration files due to false error with import.meta由于 import.meta 的错误错误,tsc 不会生成声明文件
【发布时间】:2021-12-31 04:31:14
【问题描述】:

我正在使用 ViteJS 编译一个 TS 代码库。 Vite 编译代码没有问题,但它不处理 types,所以我尝试使用 Typescript 的 tsc 来执行此操作,并且每次引用 @ 都会出错987654323@.

我运行类型构建:

npx tsc src/index.ts \
    --emitDeclarationOnly \ 
    --module es2020 \
    --target es2020 \
    --outDir dist/types

注意:将es2020 更改为esnext 也会以同样的方式失败

在我使用新的 ES 模块语法的所有地方都出现以下错误:

“ImportMeta”类型上不存在属性“env”

但在 vs-code 中,类型系统很满意,而且确实在运行时确实有效。现在 vs-code 很高兴的原因是我创建了一个 src/ImporMeta.d.ts 文件,它看起来像这样:

interface ImportMeta {
  env: {
    VITE_APP_TITLE?: string;
    BASE_URL: string;
    MODE: string;
    PROD: boolean;
    DEV: boolean;
    VITE_DEBUG?: boolean;
    [`VITE_${string}`]: string;
  };
}

然而,出于某种原因,tsc 没有看到此文件或由于某些其他原因拒绝构建,即使“目标”和“模块”都处于 import.meta 应该是的级别允许。

谁能帮我解决我做错了什么?


我正在使用 Typescript 4.5.2 并在节点 16.13.0 下运行(也尝试了节点 14.18.1 但结果相同)


更新:令我惊讶的是,虽然我遇到了这些错误(其中三个),但它实际上仍然构建了类型,包括文件来源的文件......对于我的 CI/CD,我需要错误去离开所以问题还没有解决,但现在我很困惑为什么它会构建然后失败。

【问题讨论】:

    标签: typescript es6-modules


    【解决方案1】:

    您不需要为此自定义 .d.ts,只需在 tsconfig.json 中使用以下内容:

    {
      "compilerOptions": {
        "types": ["vite/client"]
      }
    }
    

    这是相应的文档页面:https://vitejs.dev/guide/features.html#client-types

    请注意,.d.ts 文件可能不会被 tsc 拾取,因为您为 tsc 命令指定了入口点。

    【讨论】:

    • 确实你没有,但正如 Vite 文档解释的那样,你可以这样做以增加更强大的打字。事实上,删除这个文件会导致我的代码在 vs-code 中失败,但命令行中的 tsc 命令仍然以同样的方式失败。
    • 还请记住,如果您在命令行上使用 tsc 并指向入口点文件,则不要使用 tsconfig.json 文件,因此此设置(顺便说一句,我确实拥有)将产生零影响。
    • 实际上,刚刚输入了这个,我现在有点困惑,因为显然在我所有的胡闹中,我实际上已经从我的tsconfig.json 中删除了这一行,当我把它放回去时,错误就消失了.这很违反直觉,但由于某种原因似乎仍然有效。
    • 在我看来,在命令行中拥有一长串 tsc 选项并不容易维护,我更喜欢为我的项目提供 tsconfig 文件。据我所知,如果 tsconfig json 存在,vscode 将使用它。此外,您可以将 --types (typescriptlang.org/tsconfig/#types) 用于相同目的,或者仅在命令行中包含您的 .d.ts 文件以及入口点 glob
    • 哦,我同意;我绝对更喜欢使用 tsconfig.json,但我需要检查一下,因为当我声明一个入口点时,我认为它没有选择我的“目标”和“模块”参数。不过这可能是错误的,因为我昨晚看这个的时候很累。
    猜你喜欢
    • 2012-08-16
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多