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或其他什么东西
