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);