Closed2

Omit と Pick のようなメソッドを作成した

hanetsukihanetsuki

TypeScriptのUtility TypePickOmitように使えるメソッドが欲しかったので作った。
型補完もちゃんと効きます。

https://www.typescriptlang.org/docs/handbook/utility-types.html

export class ObjectModule {
  /** objから任意のkeyを選びオブジェクトを作成する。 */
  public static pick<T, K extends keyof T>(obj: T, ...key: K[]): Pick<T, K> {
    return this.basePick(obj, (k, v) => {
      if (key.includes(k as K)) return { [k]: v };
    });
  };

  /** objから任意のkeyを意外を選びオブジェクトを作成する。 */
  public static omit<T, K extends keyof T>(obj: T, ...key: K[]): Omit<T, K> {
    return this.basePick(obj, (k, v) => {
      if (!key.includes(k as K)) return { [k]: v };
    });
  };

  /**
   * pick, omitで利用する共通関数
   * collBackのオブジェクトを新しい一つのオブジェクトとして戻す。
   */
  private static basePick<T, K extends keyof T, R>(obj: T, collBack: (k: K, v: T[K]) => {[x: string]: T[K]}): R {
    return Object.assign({}, ...Object.entries(obj).map(([k, v]) => collBack(k as K, v)).filter(v => v));
  }
}
hanetsukihanetsuki

lodash使っても良かったけど、なんか負けた気がするのが嫌で作りました。
楽しかったです。

このスクラップは2021/09/07にクローズされました