我有以下创建代理的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?