查看器失败文案改用穷尽 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:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user