OSS探訪GitHubでログイン

未知の値をcomposableなruntime validatorで検証し、同じ定義からTypeScript型を推論する

スコアの見方

OSS規模スコアはStars・Watchers・Forks・Contributorsを対数圧縮して重み付けした現在の規模指標(上限なし)です。発掘スコアは現在のOSS規模スコアから発掘時点のOSS規模スコアを引いた値、更新ペースは直近30日Commit数、成長モメンタムは直近の観測期間におけるOSS規模スコア差、OSS健全度は取得できた更新状況・Community Health・Releaseの0〜100評価です。

Stars
2,699
主要言語
TypeScript
ライセンス
MIT
リポジトリ最終更新
2026/08/14
ページ内ナビ

概要

Runtypesは、primitive・array・tuple・object・union・intersectionなどを組み合わせて実行時の型検証を行うlibraryです。check、guard、assertで入力を検証し、同じruntypeからStaticでTypeScript型を取り出せます。

特徴と向いている用途

公式資料に基づく紹介・実機未検証 · 内容確認日:

主な特徴

Object・Union・Tupleなどを組み合わせてruntime typeを作る

Object、Array、Tuple、Union、Intersectなどのvalidatorを組み合わせ、外部JSONやAPI responseの形を実行時に確認できます。複雑なdomain modelも小さなruntypeから再利用して構成できます。

出典:[1]

check・guard・assertを用途に応じて使い分ける

checkは不正値でValidationErrorを投げ、guardはbooleanのtype guardとして使えます。assertはTypeScript assertion functionとして、検証後の変数を安全な型へ絞り込みます。

出典:[1]

Staticとconformでruntime定義と静的型を揃える

Static<typeof Runtype>でruntypeから静的型を推論できます。既存の型定義に合わせたい場合は.conform<T>()でruntypeの形が指定型へ適合しているかcompile時に確認できます。

出典:[1]

向いている用途

API responseや設定値をTypeScriptの型と同じ場所で検証したい場合に向く

network、storage、設定fileなどから来るunknown値を実行時に確認しつつ、同じ定義をapplication内部のTypeScript型にも使いたいprojectに適します。

出典:[1]

導入前の確認

checkとparseでは値の扱いが異なる

READMEはcheckなどのvalidation methodとparseを区別しています。parseはparserやdefaultを適用し、Objectでは指定propertyだけの新しいobjectを返す一方、checkは元の値を返します。変換の有無を意識して入口を選んでください。

出典:[1]

optional propertyはexactOptionalPropertyTypes前提の意味になる

RuntypesはruntimeではexactOptionalPropertyTypes: true相当の意味でoptional propertyを扱います。READMEもこのcompiler optionを無効にしないことを強く推奨しており、無効なprojectでは静的型とruntime behaviorがずれる可能性があります。

出典:[1]

参考にした公式資料

  1. [1]Runtypes v7.0.5 README(2026-10-05)
  2. [2]Runtypes v7.0.5 release(2026-10-05)
  3. [3]Runtypes MIT license(2026-10-05)
編集部からの補足

check()は検証済みの元の値を返し、parse()はparserやdefaultを適用した新しい値を返します。Objectでは追加propertyの扱いも異なるため、単純なvalidationと変換を同じものとして扱わないのが重要です。

3ステップで試す

  1. 1

    Runtypes 7.0.5を一時projectへ導入する

    review対象releaseを固定し、既存projectへ影響しない一時directoryへ導入します。

    demo=$(mktemp -d "${TMPDIR:-/tmp}/runtypes.XXXXXX") && cd "$demo" && npm init -y >/dev/null && npm install --save-exact runtypes@7.0.5
  2. 2

    Object runtypeで正しい値と不正な値を検証するscriptを作る

    READMEのObjectとcheckの流れに沿い、正しいobjectは通し、型が違う入力はValidationErrorで拒否されることを確認します。

    printf "%s\n" "import {Object, Number, String} from 'runtypes';" "const User = Object({id: Number, name: String});" "const user = User.check({id: 1, name: 'Ada'});" "let rejected = false;" "try { User.check({id: '1', name: 'Ada'}); } catch { rejected = true; }" "if (!rejected) process.exit(1);" "console.log(user);" > demo.mjs
  3. 3

    Node.jsでruntime validationを実行する

    有効な値を取得でき、不正な値が拒否されることを確認します。

    node demo.mjs
公式READMEで確認

成長

成長の推移 · 直近30日

2,699 Stars

推移データを蓄積中です。

開発アクティビティ

直近90日・週次

Commit(直近30日)
0
Open PR
1

開発アクティビティを蓄積中です。

Built with

カテゴリとタグ

GitHubデータ

GitHubのデータGitHubの詳細データを見る

GitHub Topics

  • typescript
  • runtime
  • types
  • validation
Stars
2,699
Forks
90
Watchers
10
Open Issues
24
Contributors
40
所有者種別
Organization
主要言語
TypeScript
ライセンス
MIT
リポジトリ最終更新
2026/08/14

このOSSの使い方や活用事例をMarkdownで投稿できます。管理者が承認した後に公開されます。

情報の誤りを報告

掲載内容に誤りや古い情報があればお知らせください。

このページを読んで、次に何をすればよいか分かりましたか?