This is a known TypeScript behavior. Homomorphic mapped types (where you map over keyof T directly) do preserve modifiers, but only if you write it as { [K in keyof T]: ... }. If you're using a generic constraint like K extends keyof T in a separate type parameter, the compiler loses the modifier tracking. The fix is to use the built-in utility types: type MyMapped = { [K in keyof T]: Transform } which is homomorphic vs type MyMapped = { [P in K]: ... } which is not.