跳至主要内容

禁止将基类转换为字符串

要求.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();
在游乐场中打开

选项

此规则接受以下选项

type Options = [
{
ignoredTypeNames?: string[];
},
];

const defaultOptions: Options = [
{ ignoredTypeNames: ['Error', 'RegExp', 'URL', 'URLSearchParams'] },
];

ignoredTypeNames

要忽略的类型名称的字符串数组,这对于缺少toString()(但实际上具有toString())的类型很有用。在旧版本的 TypeScript 中,某些类型缺少toString(),例如RegExpURLURLSearchParams 等。

以下模式被认为使用默认选项{ ignoredTypeNames: ["RegExp"] }是正确的

`${/regex/}`;
'' + /regex/;
/regex/.toString();
let value = /regex/;
value.toString();
let text = `${value}`;
在游乐场中打开

何时不使用它

如果您不介意在您的值中存在"[object Object]"或不正确的类型强制转换的风险,那么您将不需要此规则。

进一步阅读


类型检查的 lint 规则比传统的 lint 规则更强大,但也需要配置 类型检查的 lint。如果您在启用类型检查规则后遇到性能下降,请参阅 性能故障排除

资源