type Proxy‹T› = { get(): T; set(value: T): void; } type Proxify‹T› = { [P in keyof T]: Proxy‹T[P]›; } function proxify‹T›(o: T): Proxify‹T› { // ... wrap proxies ... } let proxyProps = proxify(props);