ゆずめも

メモ的なブログです。主に勉強した事について書いてます。

tsでクラスからファンクション以外のプロパティを抜き出した型を作る

Typescriptでコードを書いていてクラスの型から関数以外を抜き出した型が欲しくて、typescript meetupでMapped Typesとかのセッション見て頑張ったらできるのでは🤔ということでやってみた

typescript-jp.connpass.com

要するに以下のようなクラスからxyだけの型が欲しい

class Hoge {
  x: string
  y: number

  constructor(partial: Partial<Hoge>) {
    Object.assign(this, partial)
  }

  getHoge(): string {
    return `${this.x}-${this.y}`
  }
}

乃木坂46のANN聞きながら作ったやつ

export type OmitFunction<T> = Pick<
  T,
  {[K in keyof T]: T[K] extends (...args: any) => any ? never : K}[keyof T]
>

これを使うとclassの型からpropertyだけ取り出せる

type A = OmitFunction<Hoge> // => A is {x: string, y: number}

参考

ちなみに

ググったけど出てこなかったから1時間くらい悩んでやっと解決したのに、自分が付けた型名から検索ワードを考えた結果stackoverflowにすでにあった。。。

このへんどういうキーワード入れてやればいいかわからないのと、もうちょっといい感じの書き方ないのか?ってのが常についてまわる

stackoverflow.com

ただ回答見ても、同じようなコードだしなんかもっといい方法無いんだろうか