dtslint
dtslintはTypeScriptの型定義ファイル(.d.ts)が正しく書かれているか、期待通りに機能するかをテストするツール
使用目的
ライブラリの作者が、自身のライブラリの型定義の品質を保証するため
DefinitelyTyped (多くのJavaScriptライブラリの型定義が集められているリポジトリ) に型定義を提供する際に、その型定義が正確であることを検証するため
テストの書き方
特定のコメント形式を使って型に関するアサーションを行う
$ExpectType <ExpectedType>
このコメントの直後の行の式が<ExpectedType>で指定された型と一致することを期待する
型が一致しない場合はエラーが発生
code:ts
// --- index.d.ts (テスト対象の型定義) ---
// declare function greet(name: string): string;
// declare function getAge(): number;
// --- test.ts (dtslint用テストファイル) ---
import { greet, getAge } from './index'; // テスト対象の型定義をインポート
const greeting = greet("World");
// $ExpectType string
greeting; // greeting の型が string であることを期待
const age = getAge();
// $ExpectType number
age; // age の型が number であることを期待
$ExpectError <OptionalErrorMessageSubstring>
このコメントの直後の行で、TypeScriptのコンパイルエラーが発生することを期待する
もしエラーが発生しなかった場合、または期待と異なるエラーだった場合はエラーが発生
code:ts
// --- index.d.ts (テスト対象の型定義) ---
// declare function processInput(input: string | number): void;
// --- test.ts (dtslint用テストファイル) ---
import { processInput } from './index';
processInput("hello"); // OK
processInput(123); // OK
// $ExpectError
processInput(true); // boolean型は受け付けないので、ここでエラーが発生することを期待
利用シーン
公開するライブラリの .d.ts ファイルの品質を厳密にテストしたい場合
DefinitelyTyped に型定義をコントリビュートする場合
複数のTypeScriptバージョンでの型定義の互換性を保証したい場合