2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

typescript-eslintのadjacent-overload-signaturesルールについて

Posted at

はじめに

この記事では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の実行エラーを防ぐことにもなります。このルールを課すことで特定のコードが実行できなくなることはないことに加えて、可読性の向上・バグの回避につながるルールのため採用すべきルールと考えています。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?