网站搜索

Vite - `declare const` 防止 TypeScript 标记定义实际上并不起作用


Vite 关于 define 的文档建议“将类型声明添加到 env.d.ts 或 vite-env.d.ts 文件中,以获得类型检查和智能提示。”

值被正确替换,但TypeScript 仍然报错。

vite.config.js

const web_describe = execSync("git describe --dirty").toString().trim();
const meta_describe = execSync("git -C ./path/to/submodule describe --dirty").toString().trim();

export default defineConfig({
    // ...
    define: {
        __WEB_GIT_DESCRIBE__: JSON.stringify(web_describe),
        __META_GIT_DESCRIBE__: JSON.stringify(meta_describe),
    },
});

(我想有人出于某种原因删除了问题中的这部分?)
vite-env.d.ts

// actual values in vite.config.js
// this is just to trick TypeScript into not flagging them in App.vue
declare const __WEB_GIT_DESCRIBE__: string;
declare const __META_GIT_DESCRIBE__: string;

App.vue(代码片段)

tsconfig.json - 来自 tsc 的模板,我唯一更改的是 strictNullChecks。~~添加它并没有改变任何东西。~~


编辑 2023-03-21

当我添加 tsconfig 时,错误自动修复了,显然我没有注意到。向 git bisect 致敬。

commit 09b4c32d098922d62ea57cdb3dadd24a63d9b895 (HEAD)
Author: Connor King <[email >
Date:   Sun Mar 19 13:23:58 2023 -0400

    ts-ify Ship.ts

 src/Component.ts         |  16 +++++++++-------
 src/{Ship.js => Ship.ts} | 139 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------
 tsconfig.json            | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 201 insertions(+), 57 deletions(-)

如果你能弄清楚我的 tsconfig 中的 什么 修复了它(为了未来有相同问题但已经有 tsconfig 的人),我会接受这个答案。

编辑 2023-03-22:链接到我整个该死的项目。这是我们正在制作的战争游戏/桌上角色扮演游戏。

答案#1

您必须有一个 tsconfig.json 文件,Globals 才能工作 即使是一个空的 {} 文件也足够

否则,您的文件将被视为独立脚本,除了它们明确 import 的内容或使用“三斜线引用” /// <reference path="./vite-env.d.ts" /> 引用的内容外,不具有其他作用域

答案#2

试着写

// some .d.ts, vite-env.d.ts is fine
declare global {
  const __WEB_GIT_DESCRIBE__: string;
}

你的 vite-env.d.ts 可能无法使常量成为全局的,因为:

  • 它被认为是一个模块而不是全局 d.ts,因为它有 import 或 export 或其他什么东西

相关文章