由于 import.meta 的错误错误,tsc 不会生成声明文件

tsc won't produce declaration files due to false error with import.meta

我正在使用 ViteJS 编译 TS 代码库。 Vite 转译代码没有问题,但它不处理 types 所以我尝试使用 Typescript 的 tsc 来做到这一点并获得每次引用 import.meta.env.

时都会出错

我 运行 构建类型:

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

Note: changing es2020 to esnext also fails in the same way

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

Property 'env' does not exist on type 'ImportMeta'

但是在 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 应该被允许。

任何人都可以帮助我解决我做错的事情吗?


我在节点 16.13.0 下使用 Typescript 4.5.2 和 运行ning(也试过节点 14.18.1 但结果相同)


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

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

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

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

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