Skip to content
← Back to rules

typescript/no-base-to-string 正确性

This rule is turned on by default when type-aware linting is enabled.
💭 This rule requires type information.

它的作用

此规则要求 toString()toLocaleString() 调用仅作用于在字符串化时能提供有用信息的对象。

为什么这是个问题?

在普通对象上,JavaScript 的 toString() 方法会返回 [object Object],这并不包含有用的信息。此规则防止对那些会返回无用字符串的对象调用 toString()toLocaleString()

示例

以下为 错误 用法示例:

ts
// 这些表达式将求值为 '[object Object]'
({}).toString();
({ foo: "bar" }).toString();
({ foo: "bar" }).toLocaleString();

// 这个表达式将求值为 'Symbol()'
Symbol("foo").toString();

以下为 正确 用法示例:

ts
const someString = "Hello world";
someString.toString();

const someNumber = 42;
someNumber.toString();

const someBoolean = true;
someBoolean.toString();

class CustomToString {
  toString() {
    return "CustomToString";
  }
}
new CustomToString().toString();

配置

此规则接受一个配置对象,包含以下属性:

checkUnknown

type: boolean

default: false

是否也检查 unknown 类型的值。 当设置为 true 时,对 unknown 值调用 toString 将会被标记。 默认值为 false

ignoredTypeNames

type: string[]

default: ["Error", "RegExp", "URL", "URLSearchParams"]

在检查不安全的 toString 使用时,要忽略的类型名称列表。 这些类型即使没有自定义实现,也被认为是安全的,可以调用 toString

如何使用

通过配置文件或命令行启用此规则的方法如下:

json
{
  "rules": {
    "typescript/no-base-to-string": "error"
  }
}
bash
oxlint --type-aware --deny typescript/no-base-to-string

参考资料