refactor(web): hasApplicableFix 改类型谓词,消除 applyConflictFix 强转
hasApplicableFix 重写为对象入参类型谓词 patch is ApplicablePatch,谓词命中后 applyConflictFix 里 original/replacement 自动收窄为 string,删两处 as string;补收窄单测。
This commit is contained in:
@@ -4,12 +4,26 @@ import { applyConflictFix, hasApplicableFix } from "./applyFix";
|
||||
|
||||
describe("hasApplicableFix", () => {
|
||||
it("requires non-empty original and string replacement", () => {
|
||||
expect(hasApplicableFix("迈巴赫", "奔驰")).toBe(true);
|
||||
expect(hasApplicableFix("删我", "")).toBe(true); // 空串=删除,仍可应用
|
||||
expect(hasApplicableFix(null, "奔驰")).toBe(false);
|
||||
expect(hasApplicableFix("", "奔驰")).toBe(false);
|
||||
expect(hasApplicableFix("迈巴赫", null)).toBe(false);
|
||||
expect(hasApplicableFix(undefined, undefined)).toBe(false);
|
||||
expect(hasApplicableFix({ original: "迈巴赫", replacement: "奔驰" })).toBe(true);
|
||||
// 空串=删除,仍可应用
|
||||
expect(hasApplicableFix({ original: "删我", replacement: "" })).toBe(true);
|
||||
expect(hasApplicableFix({ original: null, replacement: "奔驰" })).toBe(false);
|
||||
expect(hasApplicableFix({ original: "", replacement: "奔驰" })).toBe(false);
|
||||
expect(hasApplicableFix({ original: "迈巴赫", replacement: null })).toBe(false);
|
||||
expect(hasApplicableFix({ original: undefined, replacement: undefined })).toBe(
|
||||
false,
|
||||
);
|
||||
});
|
||||
|
||||
it("narrows original/replacement to string when true (type predicate)", () => {
|
||||
const patch: { original: string | null; replacement: string | null } = {
|
||||
original: "迈巴赫",
|
||||
replacement: "奔驰",
|
||||
};
|
||||
if (!hasApplicableFix(patch)) throw new Error("expected applicable");
|
||||
// 编译期收窄:无需强转即可当 string 拼接(`as string` 已消除)。
|
||||
const combined: string = patch.original + patch.replacement;
|
||||
expect(combined).toBe("迈巴赫奔驰");
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user