📝

オブジェクトの型から任意の文字で始まるプロパティを取り除く

2024/03/22に公開

結論

こんな感じのを作る。

type OmitByPrefix<T extends Record<string, unknown>, Prefix extends string> = {
    [P in keyof T as P extends `${Prefix}${string}` ? never : P]: T[P];
};

こんな型があるとします(とある OSS の型をお借りして一部を削ったものです)。

interface Options {
  altFormat: string;
  altInput: boolean;
  altInputClass: string;
  nextArrow: string;
  now: Date;
  onChange: Hook[];
  onClose: Hook[];
  onDestroy: Hook[];
  onKeyDown: Hook[];
  onOpen: Hook[];
  onReady: Hook[];
  onValueUpdate: Hook[];
  static: boolean;
  weekNumbers: boolean;
  wrap: boolean;
}

↑ の型からイベント( onXXX )を取り除きたい場合は、↓ のようにします。

type MyOptions = OmitByPrefix<Options, "on">

Discussion