Typescriptでコードを書いていてクラスの型から関数以外を抜き出した型が欲しくて、typescript meetupでMapped Typesとかのセッション見て頑張ったらできるのでは🤔ということでやってみた
要するに以下のようなクラスからx
とy
だけの型が欲しい
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}
参考
- TypeScriptでテストコードを徹底的に型推論する / TypeScript Meetup 4 - Speaker Deck
- TypeScript/es5.d.ts at master · microsoft/TypeScript · GitHub
ちなみに
ググったけど出てこなかったから1時間くらい悩んでやっと解決したのに、自分が付けた型名から検索ワードを考えた結果stackoverflowにすでにあった。。。
このへんどういうキーワード入れてやればいいかわからないのと、もうちょっといい感じの書き方ないのか?ってのが常についてまわる
ただ回答見ても、同じようなコードだしなんかもっといい方法無いんだろうか