ExpressのEndpointに型を付ける
やりたいこと
Requestのpath params、query params、bodyに型を付けたい
実行時型検査をして欲しい
数値のみを許容する場合は、number型にしてほしい
Responseに型を付けたい
いろいろlibraryがある
typera
io-tsを使う
これでだいたい目的は達成できたmrsekut.icon
hyper-ts
express-zod-api
https://github.com/RobinTail/express-zod-api
良い
が、範囲が広い
全体的に依存することになる
zod-express-middleware
https://github.com/Aquila169/zod-express-middleware
薄いので自作できそうmrsekut.icon
refine.transformすると型エラーになってしまう。惜しい
これは単純にmrsekut.iconのzod知識不足かもしれない
zod-express-guard
2020/12から更新が止まっている
ちょっと触ったけど無理だったので却下
express-fp
2018年から更新が止まっている
『実践TypeScript』にも書いている
流し読みした感じ、library使っていないので冗長な感じがする
まだちゃんと読んでないmrsekut.icon
サンプルコード
ちなみに、Expressのdefaultでpath parameterは型が効く
Template Literal Typesのおかげ
code:ts
router.get('/:id/books/:bookId', (req, res) => {
const { id, bookId } = req.params; // 型が効く
const value = { value: ${id}: ${bookId} };
res.send(value);
});
ただし、全てstringになる
ここも
numberである
正数である
などを型安全にvalidationしたい