Skip to content
← Back to rules

typescript/no-unsafe-member-access 严谨

💭 This rule requires type information.

它的作用

此规则禁止对类型为 any 的值进行成员访问。

为什么这是不好的?

TypeScript 中的 any 类型会禁用类型检查。当你对类型为 any 的值访问成员(属性或方法)时,TypeScript 无法验证该成员是否存在,也无法确定其类型。这可能导致运行时错误。

示例

以下代码是 错误 的示例:

ts
declare const anyValue: any;

anyValue.foo; // 不安全的成员访问

anyValue.bar.baz; // 不安全的嵌套成员访问

anyValue["key"]; // 不安全的计算成员访问

const result = anyValue.method(); // 不安全的方法访问

以下代码是 正确 的示例:

ts
declare const obj: { foo: string; bar: { baz: number } };
declare const unknownValue: unknown;

obj.foo; // 安全

obj.bar.baz; // 安全

obj["foo"]; // 安全

// 对 unknown 进行类型守卫
if (typeof unknownValue === "object" && unknownValue !== null && "foo" in unknownValue) {
  console.log(unknownValue.foo); // 经过类型守卫后是安全的
}

// 如有必要,显式类型断言
(anyValue as { foo: string }).foo; // 显式地不安全但有意为之

配置

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

allowOptionalChaining

type: boolean

default: false

是否允许在 any 值上使用 ?. 可选链。
当为 true 时,对 any 值的可选链将不会被标记。默认为 false

如何使用

要通过配置文件或 CLI 启用 此规则,可以使用:

json
{
  "rules": {
    "typescript/no-unsafe-member-access": "error"
  }
}
bash
oxlint --type-aware --deny typescript/no-unsafe-member-access

参考资料