Пропустить до содержимого

TypeScript 7 исправляет учёт доступности сеттеров в объединениях и пересечениях

Опубликовано: 24 августа 2026 г.

Microsoft внесла в нативный модуль проверки типов TypeScript исправление, которое сохраняет раздельную доступность чтения и записи для свойств, синтезированных из объединений и пересечений.

Что изменилось

Ранее доступность сеттера для таких синтетических свойств могла игнорироваться, поскольку при проверке фактически использовалась доступность геттера. Поэтому общедоступный геттер в сочетании с защищённым сеттером мог допустить недопустимую запись через объединение или пересечение.

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 public
c.foo = 123; // Invalid: write access is protected

Теперь модуль проверки типов отдельно регистрирует доступность для записи. Чтение foo по-прежнему допустимо, а при присваивании ему значения корректно сообщается об ошибке доступа.

Почему это важно

Классы могут намеренно предоставлять общедоступное чтение, ограничивая при этом запись. Исправление сохраняет эту границу, когда TypeScript объединяет типы объектов в объединения или пересечения, и не допускает случайного расширения доступа для записи.

Доступность

Изменение было внесено в нативную кодовую базу TypeScript после выпуска TypeScript 7.0. В источнике не указана стабильная версия npm, включающая это изменение, поэтому, прежде чем полагаться на такое поведение, проверьте примечания к выпуску установленной версии.

Источник

Ознакомьтесь с принятым пул-реквестом TypeScript: Fix getDeclarationModifierFlagsFromSymbolEx for synthetic properties.