说服TS通过代理到达的对象永远不会为空

时间:2019-02-08 18:52:26

标签: javascript typescript proxy proxies

我有以下创建代理的fn:

const getStorageProxy = (store?: Storage) => {
  const proxyObj: { store?: DataStorage } = {};

  return new Proxy(proxyObj, {
    get(obj, prop) {
      if (!obj.store) {
        obj.store = new DataStorage(store);
      }

      return obj.store[prop];
    },
  });
};

然后我导出该代理的多个实例:

const storageA = getStorageProxy(storeA);
const storageB = getStorageProxy(storeB);

export { storageA, storageB };

这样做的原因是,除非使用DataStorage类,否则我实际上不希望实例化该类;为了方便起见,我希望能够键入:

import { storageA } from 'storage';

一切正常。问题是,根据TS,我的两个导出的存储实例都属于DataStorage | void类型,原因是:

const proxyObj: { store?: DataStorage } = {};

它们实际上不是由于代理中的getter引起的,但是我如何在实例化时不向proxyObj.store实际分配内容的情况下将其告知TS?

0 个答案:

没有答案