Как сделать определенные клавиши необязательными, жесткий режим (без каких-либо утилит)
type ExcludeKey<T extends Record<string,unknown>, U extends keyof T>={ [K in keyof T as K extends U ? never : K]: T[K] }
type MakeKeyOptional<T extends Record<string,unknown>, U extends keyof T>=ExcludeKey<T,U> & {[K in U]?:T[K]}
type A = MakeKeyOptional<{a:1,b:2,c:3},"b"|"c">
const a1:A = {a:1} // ok! const a2:A = {a:1,b:2} // ok! const a3:A = {a:1,b:2,c:3} // ok! const a4:A = {b:2,c:3} // expect error!
"детская площадка"
простой режим (с утилитами)
type MakeKeyOptional<T extends Record<string, unknown>, U extends keyof T> = Omit<T, U> & Partial<Pick<T, U>>;