fix(mermaid): 修复 tsc 类型错误

- mermaid.ts: initMermaid 早退路径(root 未命中)返回 Promise.resolve() 而非
  undefined,匹配 Promise<void> 签名。
- theme-transition.test.ts: resolveAsync 改用 mutable 容器 { fn: null } 包裹,
  绕过 TS 跨闭包控制流收窄(原 let + 闭包赋值,在 ?.() 处被判定为 null → never)。

上提交漏跑 tsc --noEmit(vitest 用 esbuild 不做类型检查),本次补验 tsc + vite build。
This commit is contained in:
xfy 2026-07-16 17:06:06 +08:00
parent bdfc7a19e9
commit 0395c55213
2 changed files with 7 additions and 5 deletions

View File

@ -152,7 +152,7 @@ function observeBlock(pre: HTMLPreElement, render: () => Promise<void>): void {
*/ */
export function initMermaid(selector: string, theme: ThemeName): Promise<void> { export function initMermaid(selector: string, theme: ThemeName): Promise<void> {
const root = document.querySelector(selector); const root = document.querySelector(selector);
if (!root) return; if (!root) return Promise.resolve();
// 路径 1未渲染的块<code> 还在)。 // 路径 1未渲染的块<code> 还在)。
const blocks = root.querySelectorAll<HTMLPreElement>('pre > code.language-mermaid'); const blocks = root.querySelectorAll<HTMLPreElement>('pre > code.language-mermaid');

View File

@ -210,13 +210,15 @@ describe('startThemeTransition', () => {
writable: true, writable: true,
}); });
// registry 回调返回一个可控的 Promise,记录它是否在 callback resolve 前完成 // registry 回调返回一个可控的 Promise,记录它是否在 callback resolve 前完成。
let resolveAsync: (() => void) | null = null; // resolveAsync 用 mutable 容器包裹,绕过 TS 跨闭包的控制流收窄(否则在 ?.() 处
// 被判定为 null → never)。
const resolveAsync: { fn: (() => void) | null } = { fn: null };
const asyncDone = { value: false }; const asyncDone = { value: false };
const off = onThemeChange((isDark) => { const off = onThemeChange((isDark) => {
void isDark; void isDark;
return new Promise<void>((resolve) => { return new Promise<void>((resolve) => {
resolveAsync = () => { resolveAsync.fn = () => {
asyncDone.value = true; asyncDone.value = true;
resolve(); resolve();
}; };
@ -230,7 +232,7 @@ describe('startThemeTransition', () => {
expect(asyncDone.value).toBe(false); expect(asyncDone.value).toBe(false);
// 触发异步任务完成 // 触发异步任务完成
resolveAsync?.(); resolveAsync.fn?.();
await callbackPromise; await callbackPromise;
expect(asyncDone.value).toBe(true); expect(asyncDone.value).toBe(true);