禁止将基类转换为字符串
要求
.toString()
仅在对对象调用时才提供有用的信息。
💭
此规则需要类型信息才能运行。
当 JavaScript 将对象转换为字符串时,例如在+
添加到字符串或在${}
模板文字中时,它将调用对象的toString()
。默认的 Object .toString()
使用格式"[object Object]"
,这通常不是预期的。此规则报告未被视为基本类型且未定义更实用的.toString()
方法的字符串化值。
请注意,
Function
提供了自己的.toString()
,它返回函数的代码。函数不会被此规则标记。
.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/no-base-to-string": "error"
}
};
在游乐场中尝试此规则 ↗
示例
- ❌ 不正确
- ✅ 正确
// 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();
在游乐场中打开// 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}`;
在游乐场中打开选项
此规则接受以下选项
type Options = [
{
ignoredTypeNames?: string[];
},
];
const defaultOptions: Options = [
{ ignoredTypeNames: ['Error', 'RegExp', 'URL', 'URLSearchParams'] },
];
ignoredTypeNames
要忽略的类型名称的字符串数组,这对于缺少toString()
(但实际上具有toString()
)的类型很有用。在旧版本的 TypeScript 中,某些类型缺少toString()
,例如RegExp
、URL
、URLSearchParams
等。
以下模式被认为使用默认选项{ ignoredTypeNames: ["RegExp"] }
是正确的
`${/regex/}`;
'' + /regex/;
/regex/.toString();
let value = /regex/;
value.toString();
let text = `${value}`;
在游乐场中打开何时不使用它
如果您不介意在您的值中存在"[object Object]"
或不正确的类型强制转换的风险,那么您将不需要此规则。
相关
进一步阅读
类型检查的 lint 规则比传统的 lint 规则更强大,但也需要配置 类型检查的 lint。如果您在启用类型检查规则后遇到性能下降,请参阅 性能故障排除。