Как работают `Partial<T>`, `Required<T>` и `Readonly<T>`?
Partial<T>={ [P in keyof T]?: T[P] }— все свойства опциональныRequired<T>={ [P in keyof T]-?: T[P] }— все свойства обязательны (-?удаляет опциональность)Readonly<T>={ [P in keyof T]: +readonly T[P] }— все свойства только для чтения- Все три — поверхностные (shallow), не действуют на вложенные объекты
- Для глубоких вариантов используют рекурсивные mapped types:
DeepPartial,DeepReadonly