コンテンツにスキップ

メモリキャッシュより速いキャッシュされたオブジェクト

https://github.com/mktbsh/misc.ts/blob/main/src/utils/reusable.ts

reusable.ts
export interface Reusable<T> {
value: T;
}
export function reusable<T>(init: () => T): Reusable<T> {
return {
get value() {
const value = init();
Object.defineProperty(this, "value", { value });
return value;
},
};
}

timestamp.valueで最初に呼び出された時にDateを初期化する。

2回目以降の呼び出しでは生成済みのDateを使いまわすため、時刻が変わらない。

重い処理などで利用する想定。この例は極端。

test.ts
const timestamp = reusable(() => new Date());
// first
console.log(timestamp.value); // 2025-01-18T09:00:00.000Z;
// second
console.log(timestamp.value); // 2025-01-18T09:00:00.000Z;