修正查看器失败文案穷尽检查的写法(上一提交未通过类型检查)

- 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 用例全绿)
This commit is contained in:
2026-09-22 13:31:24 +08:00
parent 0ec0a13cbc
commit 4363a6219a
@@ -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;
}
}