TypeScript 7 sửa khả năng truy cập setter trong union và intersection
Đã xuất bản: August 24, 2026
Microsoft đã merge một bản sửa cho bộ kiểm tra TypeScript native, giữ khả năng truy cập đọc và ghi tách biệt đối với các thuộc tính được tổng hợp từ union và intersection.
Nội dung thay đổi
Trước đây, khả năng truy cập setter có thể bị bỏ qua đối với các thuộc tính tổng hợp này vì việc kiểm tra thực tế dùng khả năng truy cập của getter. Do đó, một getter public đi kèm setter protected có thể cho phép ghi không hợp lệ thông qua union hoặc intersection.
declare class C1 { get foo(): number; protected set foo(value: number);}
declare class C2 { get foo(): number; protected set foo(value: number);}
declare const c: C1 | C2;c.foo; // Valid: read access is publicc.foo = 123; // Invalid: write access is protectedBộ kiểm tra hiện ghi nhận khả năng truy cập ghi một cách riêng biệt. Việc đọc foo vẫn hợp lệ, trong khi việc gán giá trị cho nó báo lỗi khả năng truy cập đúng như mong đợi.
Vì sao điều này quan trọng
Class có thể cố ý cho phép đọc công khai trong khi hạn chế ghi. Bản sửa này giữ đúng ranh giới đó khi TypeScript kết hợp các object type thành union hoặc intersection, thay vì vô tình mở rộng quyền ghi.
Tình trạng khả dụng
Thay đổi này đã được merge vào codebase TypeScript native sau TypeScript 7.0. Nguồn không chỉ rõ phiên bản npm ổn định nào bao gồm thay đổi này, vì vậy hãy kiểm tra release notes của phiên bản đã cài đặt trước khi dựa vào hành vi này.
Nguồn
Đọc pull request TypeScript đã merge: Fix getDeclarationModifierFlagsFromSymbolEx for synthetic properties.