From 4363a6219a68fc4f465f264c93646ba3ee6b4b75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Tue, 22 Sep 2026 13:31:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=9F=A5=E7=9C=8B=E5=99=A8?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E6=96=87=E6=A1=88=E7=A9=B7=E5=B0=BD=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E7=9A=84=E5=86=99=E6=B3=95=EF=BC=88=E4=B8=8A=E4=B8=80?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=9C=AA=E9=80=9A=E8=BF=87=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - src/components/image-editor/model3d-preview/Model3dViewerModel.ts:上一提交把 never 断言写在 switch (detail?.reason) 上,default 分支里可选链未被收窄,npm run typecheck 报 TS2322(undefined 不能赋给 never)。改为先取局部常量并早返回「原因缺失 / load-failed」,switch 只处理其余三种原因,default 保留 never 断言 - 文案与判定结果不变 验证:npm run typecheck(tsconfig.typecheck-guardrails,exit 0);临时给 Model3dViewerFailureReason 增加一个成员,确认该 default 分支会编译报错(TS2322),随后已还原;npx vitest run src/components/image-editor/model3d-preview(18 用例全绿) --- .../model3d-preview/Model3dViewerModel.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/components/image-editor/model3d-preview/Model3dViewerModel.ts b/src/components/image-editor/model3d-preview/Model3dViewerModel.ts index 600cb5e75..e4f9516eb 100644 --- a/src/components/image-editor/model3d-preview/Model3dViewerModel.ts +++ b/src/components/image-editor/model3d-preview/Model3dViewerModel.ts @@ -51,20 +51,21 @@ export function resolveModel3dViewerFailureText( detail: Model3dViewerStatusDetail | null | undefined, fallbackText: string, ) { - switch (detail?.reason) { + const reason = detail?.reason; + // 加载失败没有更细的可读信息,与原因缺失共用调用方的兜底文案。 + if (reason === undefined || reason === 'load-failed') { + return fallbackText; + } + switch (reason) { case 'too-large': return `模型超过 ${MODEL3D_VIEWER_MAX_MIB} MiB,无法预览。`; case 'unsupported-format': return `无法识别模型格式,只支持 ${MODEL3D_VIEWER_SUPPORTED_FORMAT_TEXT}。`; case 'webgl-unavailable': return '当前环境不支持 WebGL2,无法预览模型。'; - // 加载失败没有更细的可读信息,与原因缺失共用调用方的兜底文案。 - case 'load-failed': - case undefined: - return fallbackText; default: { // 查看器新增失败原因时这里会编译报错,不会静默退化成通用文案。 - const unhandledReason: never = detail?.reason; + const unhandledReason: never = reason; return unhandledReason; } }