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> {
const root = document.querySelector(selector);
if (!root) return;
if (!root) return Promise.resolve();
// 路径 1未渲染的块<code> 还在)。
const blocks = root.querySelectorAll<HTMLPreElement>('pre > code.language-mermaid');

View File

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