はじめに
この記事ではtypescript-eslintのルールのうちadjacent-overload-signatures
について解説します。
typescript-eslintの他のルールについても別記事で解説し、最終的にReact開発を行うにあたって最適なルール設定を構築することを目的としています。
ルールについて
adjacent-overload-signatures
はオーバーロード関数を利用する際にまめて定義するためのルールです。"plugin:@typescript-eslint/recommended"
ではデフォルトで有効となります。
オーバーロード関数とは以下のような関数を指します。
function returnArg(arg: string): string;
function returnArg(arg: number): number;
function returnArg(arg: string | number): string | number {
return arg;
}
returnArg
は文字列か数値の値を受け取って、それをそのまま返す関数です。関数を実装した部分だけでは、返り値の型は引数の型に関わらずstring | number
を返す関数です。そこで関数シグネチャと呼ばれる型宣言を予め行うことでこの関数は文字列を引数に渡したときはstring
を返す関数、数値が引数に渡したときはnumber
を返す関数として扱われます。
実装部分でその関数における緩い型を定義し、より厳密な型をシグネチャとして別で定義して型の安全性を高めるようなイメージの機能です。
adjacent-overload-signatures
はそんなオーバーロード関数をバラバラに定義したときに違反となるルールです。
先ほどの例だとシグネチャと実装の間に関係のないコードが挟まっているときや
function returnArg(arg: string): string;
function returnArg(arg: number): number;
const hoge = 'hoge';
function returnArg(arg: string | number): string | number {
return arg;
}
シグネチャの間に余計なコードが挟まっているときに違反となります。
function returnArg(arg: string): string;
const hoge = 'hoge';
function returnArg(arg: number): number;
function returnArg(arg: string | number): string | number {
return arg;
}
ルールの採用について
このルールは可読性を上げれるだけではなく、TypeScriptの実行エラーを防ぐことにもなります。このルールを課すことで特定のコードが実行できなくなることはないことに加えて、可読性の向上・バグの回避につながるルールのため採用すべきルールと考えています。