TypeScript

【TypeScript】引数の型によって返り値の型を変える関数

こういう関数を作りたいとする。 type Func = | ((arg: "STRING") => string) | ((arg: "NUMBER") => number) 引数に "STRING" を与えると string 型が返ってくる 引数に "NUMBER" を与えると number 型が返ってくる このような関数の型を定義するには Condi…

【TypeScript】Mapped Type と Conditional Type を応用してプロパティの型と型名を相互変換する

Mapped Type と Conditional Type を応用して、オブジェクトのプロパティ型と型名を相互に変換できる。プロパティが string 型ならば "string" という文字列にしたり、逆にプロパティが"string"という文字列ならstring型にしたりできる。サンプルコードを見…

【TypeScript】Object.keys() に keyof typeof で型をつける

(TypeScript のバージョンは 3.7 である) Object.keys() は文字列の配列型を返す。 const SomeObject = { FOO: 'foo', BAR: 'bar', BAZ: 'baz', } // string[] 型 const keys = Object.keys(SomeObject) for (const key of keys) { // key は string 型な…

【React】recomposeモジュールをTypeScriptで使う

HOC(高階関数)は便利なんだけど、型と一緒に使おうとするとどうもうまくいかなくて、試行錯誤の結果やっと最小構成の例が作れたので書いておく。まあジェネリクスの練習ですね。これでそこそこの規模のものを作ろうとしたら消耗する予感しかしない。 Examp…

Server Side TypeScriptでdecoratorを使い倒す

サーバーサイドを TypeScript で書くなら decorator を活用するとシンプルに書ける。 decorator はむやみに使うと可読性・保守性が下がるけど、汎用性の高いケースに活用すればビジネスロジックに集中した快適コーディングができる、と思う。 decorator ベー…