0Pricing
TypeScript Academy · レッスン

型ユーティリティライブラリの公開

独自のユーティリティ型をnpmでパッケージ化して共有します。

「型ユーティリティライブラリの公開」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全4レッスンが含まれています。

型ユーティリティライブラリとは

型ユーティリティライブラリは TypeScript の型だけをエクスポートし、実行時コードは含みません。代表例として、type-fest、ts-essentials、utility-typesなどがあります。

// A type utility library exports types like:
export type DeepPartial<T> = T extends object
  ? { [K in keyof T]?: DeepPartial<T[K]> }
  : T;

プロジェクト構成

シンプルに保ちます。すべてのユーティリティを再エクスポートするsrc/index.tsを 1 つ用意し、tsconfig.jsonでは宣言ファイルだけを出力するように設定します。

// tsconfig.json
{
  "compilerOptions": {
    "declaration": true,
    "emitDeclarationOnly": true,
    "outDir": "dist",
    "strict": true
  }
}

型専用パッケージ用の package.json

mainフィールドとtypesフィールドが宣言ファイルを指すように設定します。ツリーシェイキングのためにsideEffects: falseを設定します。

{
  "name": "@myorg/type-utils",
  "version": "1.0.0",
  "main": "dist/index.js",
  "types": "dist/index.d.ts",
  "sideEffects": false,
  "files": ["dist"]
}

宣言ファイルの生成

tscを実行して.d.tsファイルを出力します。型専用ライブラリでは、JavaScript の出力は空または最小限になります。

# Build declarations
npx tsc
# dist/index.d.ts is generated

バージョニングと変更履歴

セマンティックバージョニングに従い、破壊的な型の変更にはメジャー、新しいユーティリティにはマイナー、修正にはパッチのバージョンを付けます。

# Bump version
npm version minor
# Generate changelog with conventional-changelog or changesets

npm への公開

npm publish または pnpm publish を使用します。組織配下のスコープ付きパッケージでは、ログイン済みであり、スコープが設定されていることを確認します。

npm login
npm publish --access public
# or for private: npm publish --access restricted

TypeScript のバージョン互換性

ユーティリティが必要とする TypeScript の最小バージョンを文書化します。再帰的な条件型には TS 4.1 以降が必要で、Awaited は TS 4.5 以降で組み込まれています。

// package.json peerDependencies
{
  "peerDependencies": {
    "typescript": ">=4.5"
  }
}

tsd による型のテスト

tsd パッケージを使用して、CI 実行時に動作する型レベルテストを記述し、ユーティリティが正しく動作することを確認します。

import { expectType } from "tsd";
import type { DeepPartial } from "@myorg/type-utils";

expectType<DeepPartial<{ a: { b: number } }>>({ a: {} });

TSDoc によるドキュメント作成

型に /** */ JSDoc コメントを追加します。TypeDoc などのツールは、これらのコメントから API ドキュメントを生成します。

/**
 * Makes all properties of T optional at every depth.
 * @example type A = DeepPartial<{ x: { y: number } }> // { x?: { y?: number } }
 */
export type DeepPartial<T> = ...

モノレポでの配布

モノレポでは、型パッケージをワークスペースパッケージとして公開し、他のアプリから npm ではなく workspace:* 経由で利用できるようにします。

// Other package's package.json
{
  "dependencies": {
    "@myorg/type-utils": "workspace:*"
  }
}

まとめ: 型ライブラリの公開

型ユーティリティライブラリでは、emitDeclarationOnly: true を設定し、src/index.ts から型をエクスポートします。また、semver でバージョン管理し、tsd でテストし、TSDoc でドキュメント化して、npm またはワークスペースレジストリに公開します。

確認問題

JavaScript を出力せず、.d.ts ファイルだけを生成する tsconfig のオプションは何ですか。

学んだこと

型ユーティリティライブラリの公開には、emitDeclarationOnly、適切な package.json フィールド、tsd による型レベルテスト、TSDoc コメント、セマンティックバージョニングが必要です。ユーティリティをコミュニティやモノレポ内で共有できます。

よくある質問

「型ユーティリティライブラリの公開」レッスンは無料ですか?

はい。「型ユーティリティライブラリの公開」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全4レッスンが含まれています。

「型ユーティリティライブラリの公開」で何を学びますか?

独自のユーティリティ型をnpmでパッケージ化して共有します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

TypeScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「型ユーティリティライブラリの公開」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このTypeScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. DeepPartialとDeepReadonly
  2. FlattenとUnwrapPromiseユーティリティ
  3. TupleToUnionとUnionToIntersection
  4. 型ユーティリティライブラリの公開
← TypeScript Academyに戻る