修正查看器失败文案穷尽检查的写法(上一提交未通过类型检查)
- 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:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user