TypeScriptの型をテストする
テスト方法
ライブラリを使ってテストする
ただし、ライブラリを使わなくてもテストは可能なので、必要に応じて導入するとよいと思います
ライブラリを使わないでテストする
専用のライブラリを使用せずとも、関数の戻り値として返却された値を変数に格納する際に、該当の変数の型を明示することでテストすることなども可能です
code:typescript
test('findUser', () => {
const user: User = findUser(users, predicate);
expect(user.id).toBe(someID);
});
ある型が意図せぬ使われ方をした際に、きちんとエラーが発生することを検証する際に使うと便利です
code:typescript
// @ts-expect-error string should not be assignable to UserID
const userID: UserID = "12345";
ライブラリ
code:typescript
import { expectTypeOf } from 'expect-type';
expectTypeOf<User>().toMatchTypeOf<{ id: string }>();
code:typescript
import { expectTypeOf, test } from 'vitest';
test('UpperCase', () => {
expectTypeOf<UpperCase<"foo">>().toMatchTypeOf<"FOO">();
});
いつ書くべきか?
基本的にユニットテストなどによって該当の型定義を持つ関数や型が間接的にカバーされているのであれば、書く必要性は低いと思います
専用のユーティリティタイプや複雑なオーバーロードが定義された関数を独自に実装した際などに書くとよさそうです