# 十四.装包和拆包

# 1.装包

type Proxy<T> = {
  get(): T;
  set(value: T): void;
};
type Proxify<T> = {
  [P in keyof T]: Person<T[P]>;
};
let props = {
  name: "abc",
  age: 111,
};
function proxify<T>(obj: T): Proxify<T> {
  let result = {} as Proxify<T>;
  for (let key in obj) {
    let value = obj[key];
    result[key] = {
      get() {
        return value;
      },
      set: (newValue) => (value = newValue),
    };
  }
  return result;
}
let proxpProps = proxify(props);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 2.拆包

function unProxify<T>(proxpProps: Proxify<T>): T {
  let result = {} as T;
  for (let key in proxpProps) {
    let value = proxpProps[key];
    result[key] = value.get();
  }
  return result;
}
let proxy = unProxify(proxpProps);
1
2
3
4
5
6
7
8
9