型ユーティリティライブラリの公開
独自のユーティリティ型を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 changesetsnpm への公開
npm publish または pnpm publish を使用します。組織配下のスコープ付きパッケージでは、ログイン済みであり、スコープが設定されていることを確認します。
npm login
npm publish --access public
# or for private: npm publish --access restrictedTypeScript のバージョン互換性
ユーティリティが必要とする 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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- DeepPartialとDeepReadonly
- FlattenとUnwrapPromiseユーティリティ
- TupleToUnionとUnionToIntersection
- 型ユーティリティライブラリの公開