From c96d7fe847a8e0b6342ccc0b7ad909c5fdb67436 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:28:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9F=A5=E7=9C=8B=E5=99=A8=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E6=96=87=E6=A1=88=E6=94=B9=E7=94=A8=E7=A9=B7=E5=B0=BD=20switch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - src/components/image-editor/model3d-preview/Model3dViewerModel.ts:resolveModel3dViewerFailureText 从早返回改成 switch,并给 default 加 never 穷尽检查;查看器今后新增失败原因会在此处编译报错,而不是静默落到通用兜底文案。文案与判定结果不变 验证:npx vitest run src/components/image-editor/model3d-preview、npx tsc -p tsconfig.typecheck-guardrails.json --noEmit --- .../model3d-preview/Model3dViewerModel.ts | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/components/image-editor/model3d-preview/Model3dViewerModel.ts b/src/components/image-editor/model3d-preview/Model3dViewerModel.ts index c5d30f338..600cb5e75 100644 --- a/src/components/image-editor/model3d-preview/Model3dViewerModel.ts +++ b/src/components/image-editor/model3d-preview/Model3dViewerModel.ts @@ -44,21 +44,28 @@ export function resolveModel3dDownloadExtension( } /** - * 查看器失败时给用户看的文案:按失败原因分开说,用早返回写成一列判断。 + * 查看器失败时给用户看的文案:按失败原因分开说,用 switch 穷尽所有原因。 * 原因缺失(宿主没拿到 detail)时用调用方的兜底文案。 */ export function resolveModel3dViewerFailureText( detail: Model3dViewerStatusDetail | null | undefined, fallbackText: string, ) { - if (detail?.reason === 'too-large') { - return `模型超过 ${MODEL3D_VIEWER_MAX_MIB} MiB,无法预览。`; + switch (detail?.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; + return unhandledReason; + } } - if (detail?.reason === 'unsupported-format') { - return `无法识别模型格式,只支持 ${MODEL3D_VIEWER_SUPPORTED_FORMAT_TEXT}。`; - } - if (detail?.reason === 'webgl-unavailable') { - return '当前环境不支持 WebGL2,无法预览模型。'; - } - return fallbackText; }