https://github.com/type-challenges/type-challenges Высококачественные типы могут помочь улучшить поддерживаемость проектов и избежать потенциальных ошибок.
Этот проект направлен на то, чтобы помочь тебе лучше понять, как работает система типов, научиться писать собственные утилиты или просто весело провести время, решая задачи. Мы также стремимся создать сообщество, где ты можешь задавать вопросы и получать ответы на проблемы, с которыми ты сталкивался в реальных проектах — эти задачи могут стать частью челленджей! Задача: `interface Todo { readonly title: string readonly description: string completed: boolean }
type Keys = GetReadonlyKeys // expected to be "title" | "description" Одно из решений: `export type ReadonlyKeys = { [P in keyof T]-?: IfEquals< { [Q in P]: T[P] }, { -readonly [Q in P]: T[P] }, never, P
}[keyof T]
type IfEquals = (() => T extends X ? 1 : 2) extends (() => T extends Y ? 1 : 2) ? A : B
Если ты можешь решить эти задачки - в реальном проекте с типизацией у тебя проблем уже не бывает :D``