查看器失败文案改用穷尽 switch

- 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
This commit is contained in:
2026-09-22 13:28:14 +08:00
parent 8131a70a2f
commit c96d7fe847
@@ -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;
}