≪ Today I learned.
RSS購読
    公開日
    タグ
    TypeScript
    著者
    ダーシノ

    TypeScript Decoratorを使ったメモ化

    TypeScript 5.0で新しいDecoratorが追加された。

    ※今回追加されたものはECMAScriptの仕様に則ったもので、TypeScriptに前からあったDecoratorはLegacy Decoratorとして区別される

    Decoratorでメモ化する

    function memo(target: any, _context: ClassMethodDecoratorContext) {
      const memo = new Map<string, any>()
    
      function method (this: any, ...args: any[]) {
        const key = JSON.stringify(args)
        if (memo.has(key)) { return memo.get(key) }
    
        const result = target.call(this, ...args)
        memo.set(key, result)
        return result
      }
      return method
    }
    
    
    class Calculator {
      @memo
      calc(x: number, y: number) {
        // めちゃくちゃ重い計算処理
        return x + y
      }
    }
    
    const calclator = new Calculator()
    
    // calc の処理がまるっと実行される
    console.log(calclator.calc(1, 2))
    
    // キャッシュされている値が返ってくるだけなので速い
    console.log(calclator.calc(1, 2))