OSS探訪GitHubでログイン

DeepPartialやStrictOmitなどを再利用し、複雑な型定義を簡潔にするTypeScript型ユーティリティ集

スコアの見方

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

Stars
4,078
主要言語
TypeScript
ライセンス
MIT
リポジトリ最終更新
2026/06/03
ページ内ナビ

概要

ts-essentialsは、TypeScriptの標準Utility Typeを補う型ユーティリティ集です。DeepPartial、StrictOmit、XOR、Paths、PathValue、Opaqueなどを組み合わせ、複雑なオブジェクト型やunion型を毎回作り直さずに再利用できます。

特徴と向いている用途

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

主な特徴

標準Utility Typeより厳密な型変換を使う

StrictOmit、StrictExclude、StrictExtractなど、標準Utility Typeより指定条件を厳密に確認する型が用意されています。keyの指定ミスを型エラーとして早く見つけたいAPIやdomain modelで利用できます。

出典:[1]

DeepPartialやDeepReadonlyで入れ子構造をまとめて変換する

DeepPartial、DeepRequired、DeepReadonly、DeepWritableなど、入れ子になったobjectやarrayへ再帰的にmodifierを適用する型を提供します。設定値や更新payloadの型を一括で作り替えたい場合に使えます。

出典:[1]

XOR・Opaque・PathsでAPIの型制約を表現する

XORで複数候補の排他条件を表すほか、Opaqueによる識別用の型、PathsとPathValueによるpath単位の型参照など、公開APIやform modelで使いやすい型が揃っています。

出典:[1]

向いている用途

frontendやlibraryで複雑な型操作を共通化したい場合に向く

API response、form state、設定object、libraryの公開型などで同じ型変換を繰り返すTypeScript codebaseに適します。型レベルのhelperを共通dependencyへまとめ、各moduleの型定義を短くできます。

出典:[1]

導入前の確認

v10.2.1はTypeScript 4.5以上とstrictNullChecksを前提にする

READMEとpackage metadataはTypeScript >=4.5を要件とし、READMEではstrictNullChecksの有効化を必須としています。既存projectで無効になっている場合は、導入前に型エラーの影響を確認してください。

出典:[1][2]

実行時関数を使う場合は通常のdependenciesへ入れる

多くの機能は型だけで完結しますが、assertやUnreachableCaseErrorなど実行時に呼び出す関数も含まれます。READMEはこれらを使う場合、devDependencyではなく通常のdependencyとして導入するよう注意しています。

出典:[1]

参考にした公式資料

  1. [1]ts-essentials v10.2.1 README(2026-10-05)
  2. [2]ts-essentials v10.2.1 package metadata(2026-10-05)
  3. [3]ts-essentials v10.2.1 release(2026-10-05)
  4. [4]ts-essentials MIT license(2026-10-05)
編集部からの補足

型だけを使う場合はREADMEどおり開発依存で導入できます。一方、assertやUnreachableCaseErrorなど実行時関数を使う場合は、READMEの注意に従って通常のdependenciesへ入れてください。

3ステップで試す

  1. 1

    ts-essentials 10.2.1とTypeScriptを導入する

    READMEどおり型だけを試すため開発依存として導入し、TypeScript compilerも同じ一時projectへ固定します。

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

    strictNullChecksを有効にしてStrictOmitを使う

    READMEが必須としているstrictNullChecksを含む設定で、代表的な型utilityを組み合わせます。

    printf "%s\n" '{"compilerOptions":{"strict":true,"strictNullChecks":true,"noEmit":true}}' > tsconfig.json && printf "%s\n" "import type {StrictOmit, DeepReadonly} from 'ts-essentials';" "type User = {id: string; profile: {name: string; active: boolean}};" "type PublicUser = StrictOmit<User, 'id'>;" "const user: DeepReadonly<PublicUser> = {profile: {name: 'Ada', active: true}};" "void user;" > index.ts
  3. 3

    TypeScript compilerで型検査する

    JavaScriptを生成せず型検査だけを実行し、ts-essentialsの型がprojectで解決されることを確認します。

    npx tsc
公式READMEで確認

成長

成長の推移 · 直近30日

4,078 Stars

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

開発アクティビティ

直近90日・週次

Commit(直近30日)
0
Open PR
1

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

Built with

カテゴリとタグ

カテゴリ

GitHubデータ

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

GitHub Topics

  • typescript
  • types
  • essentials
  • type-level-programming
  • toolbox
Stars
4,078
Forks
129
Watchers
10
Open Issues
16
Contributors
42
所有者種別
Organization
主要言語
TypeScript
ライセンス
MIT
リポジトリ最終更新
2026/06/03

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

情報の誤りを報告

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

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