Skip to content

Instantly share code, notes, and snippets.

@danmichaelo
Created July 24, 2023 08:29
Show Gist options
  • Save danmichaelo/708989a7db51b7d332853e0db3b7ecd0 to your computer and use it in GitHub Desktop.
Save danmichaelo/708989a7db51b7d332853e0db3b7ecd0 to your computer and use it in GitHub Desktop.
Lazy-loaded object in Typescript
export const lazyLoaded = <Data extends object>(loadData: () => Data) => {
let data: Data | undefined = undefined;
const isDataKey = (
obj: Data,
key: string | symbol | number
): key is keyof Data => key in obj;
return new Proxy<Data>({} as Data, {
get: (_target, prop) => {
if (typeof data === "undefined") {
data = loadData();
}
if (isDataKey(data, prop)) {
return data[prop];
}
},
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment