Typescript Proxy which returns a different type from get than it takes for set?

I have a proxy which takes items in from set(), and converts them to what is returned by get(). Here's a contrived example of a proxy which takes number for set, but returns string for get.

const doubleString = new Proxy({}, {
  get: (target, propName) => {
    return target[propName];
  set: (target, propName, value) => {
    target[propName] = `Double ${value} is ${value * 2}`;
    return true;

doubleString.a = 2;
doubleString.b = 10;


Is it possible to model an interaction like this in Typescript?

I can cast a proxy to have typing for the set part, or the get part alone, but not independently for the same proxy. I also don't think it's possible.

// Pseudo code for how it would be nice to work
type GetAndSetMerge<GET_FORM, SET_FORM> = ????;

type NumInStringOut = GetAndSetMerge<{[key: string]: string}, {[key: string]: number}>;

const typedDoubleString: NumInStringOut = doubleString; // from example above

const value: string = typedDoubleString.a; // expects output to be string
typedDoubleString.a = 2; // expects input to be number

EDIT: It really appears to not be possible