no-base-to-string
文字列化された際に有用な情報を提供するオブジェクトに対してのみ、`.toString()` の呼び出しを要求します。
拡張 "plugin:@typescript-eslint/recommended-type-checked"
を ESLint設定 で有効にすると、このルールが有効になります。
このルールを実行するには 型情報 が必要です。
JavaScript は、文字列への変換時(例:文字列への`+`演算子や`${}`テンプレートリテラルなど)にオブジェクトに対して`toString()`を呼び出します。デフォルトの`Object.toString()`は`"[object Object]"`という形式を使用しますが、これは意図したものとは異なることが多いです。このルールは、プリミティブではなく、より有用な`.toString()`メソッドを定義していない値の文字列化を報告します。
`Function`は、関数のコードを返す独自の`.toString()`を提供することに注意してください。関数は、このルールによってフラグが付けられることはありません。
module.exports = {
"rules": {
"@typescript-eslint/no-base-to-string": "error"
}
};
このルールをPlaygroundでお試しください ↗
例
- ❌ 正しくない
- ✅ 正しい
// Passing an object or class instance to string concatenation:
'' + {};
class MyClass {}
const value = new MyClass();
value + '';
// Interpolation and manual .toString() calls too:
`Value: ${value}`;
({}).toString();
Playgroundで開く// These types all have useful .toString()s
'Text' + true;
`Value: ${123}`;
`Arrays too: ${[1, 2, 3]}`;
(() => {}).toString();
// Defining a custom .toString class is considered acceptable
class CustomToString {
toString() {
return 'Hello, world!';
}
}
`Value: ${new CustomToString()}`;
const literalWithToString = {
toString: () => 'Hello, world!',
};
`Value: ${literalWithToString}`;
Playgroundで開くオプション
このルールは、以下のオプションを受け入れます。
type Options = [
{
ignoredTypeNames?: string[];
},
];
const defaultOptions: Options = [
{ ignoredTypeNames: ['Error', 'RegExp', 'URL', 'URLSearchParams'] },
];
ignoredTypeNames
無視する型名の文字列配列。これは、`toString()`がない(しかし実際には`toString()`を持つ)型に役立ちます。古いバージョンのTypeScriptには、`RegExp`、`URL`、`URLSearchParams`など、`toString()`がない型がいくつかあります。
デフォルトのオプション`{ ignoredTypeNames: ["RegExp"] }`では、以下のパターンが正しいとみなされます。
`${/regex/}`;
'' + /regex/;
/regex/.toString();
let value = /regex/;
value.toString();
let text = `${value}`;
Playgroundで開く使用しない場合
値に`"[object Object]"`または不正確な型強制のリスクを気にしない場合は、このルールは必要ありません。
関連ルール
参考資料
型チェック付きのlintルールは従来のlintルールよりも強力ですが、型チェック付きlintingの設定も必要です。型チェック付きルールを有効にした後にパフォーマンスの低下が発生する場合は、パフォーマンスに関するトラブルシューティングを参照してください。