Create new types by iterating over keys.
[P in keyof T]?
type MyPartial<T> = { [P in keyof T]?: T[P] }; function test(a: MyPartial<{x:1}>) { return a; }