TypeScript Academy · レッスン

expectTypeOfとtsdによる型テスト

実行時の動作とともに型の正しさを検証します。

レッスン 4/413 ステップ

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

ようこそ

実行時の動作だけでなく型自体もテストすることで、TypeScriptのユーティリティとジェネリック型が正しく動作することを保証できます。

型をテストする理由

ジェネリックユーティリティや条件型には、特定の型引数に対してだけ影響するバグが潜むことがあります。型テストによって、こうしたバグを検出できます。

VitestのexpectTypeOf

Vitestは、コンパイル時の型アサーションに使えるexpectTypeOfを提供しています。
import { expectTypeOf } from 'vitest';
expectTypeOf(42).toBeNumber();
expectTypeOf('hello').toBeString();

戻り値の型をアサートする

関数の戻り値の型をアサートします。
import { identity } from '../src/utils';
expectTypeOf(identity(42)).toEqualTypeOf<number>();
expectTypeOf(identity('hi')).toEqualTypeOf<string>();

tsdライブラリ

tsdは、TypeScriptの宣言ファイルを型テストするためのCLIツールです。
npm install --save-dev tsd

tsdのアサーション

tsdのアサーションを使って.test-d.tsファイルを記述します。
import { expectType, expectError } from 'tsd';
import { add } from '../src';
expectType<number>(add(1, 2));
expectError(add('a', 'b'));

expect-typeライブラリ

expect-typeライブラリは、Jest互換の型アサーションを提供します。
import { expectTypeOf } from 'expect-type';
expectTypeOf<User>().toHaveProperty('name').toBeString();

条件型のテスト

条件型がさまざまな入力に対して正しい結果を生成することを検証します。
type IsArray<T> = T extends any[] ? true : false;
expectTypeOf<IsArray<string[]>>().toEqualTypeOf<true>();
expectTypeOf<IsArray<string>>().toEqualTypeOf<false>();

Mapped Typesのテスト

Mapped Typeのユーティリティが正しい形状を生成することを確認します。
type Mutable = { -readonly [K in keyof ReadonlyUser]: ReadonlyUser[K] };
expectTypeOf<Mutable['name']>().toBeString();
expectTypeOf<Mutable>().not.toMatchTypeOf<Readonly<Mutable>>();

CIでのtsdの実行

型のリグレッションを検出できるように、tsdをCIパイプラインに追加します。
// package.json
{ "scripts": { "test:types": "tsd" } }

型テストと実行時テスト

型テストはコンパイル時に実行され、実行時のコストはゼロです。実行時テストは動作を検証します。どちらも必要です。

クイックチェック

`expectTypeOf(add(1, 2)).toEqualTypeOf()`は何を検証しますか。

まとめ

expectTypeOfとtsdを使った型テスト:主要な概念とパターンを習得しました。
無料で開始

AI チューターと学ぶ TypeScript — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
101
レッスン
352

よくある質問

「expectTypeOfとtsdによる型テスト」レッスンは無料ですか?

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

「expectTypeOfとtsdによる型テスト」で何を学びますか?

実行時の動作とともに型の正しさを検証します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「expectTypeOfとtsdによる型テスト」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. ts-jestによるTypeScript用Jestセットアップ
  2. 型安全なユニットテストの記述
  3. TypeScriptでのModuleとFunctionのモック
  4. expectTypeOfとtsdによる型テスト
← TypeScript Academyに戻る