ESLint no-unsafe-member-access报错的原因及修复方法
错误触发原因
这条@typescript-eslint/no-unsafe-member-access规则的核心作用,就是阻止所有对any类型值的无限制成员访问。
TypeScript对any类型的值不做任何类型校验,既不会知道这个值上有哪些可用属性,也不会校验你访问的属性到底是什么类型。当代码中你对某个被推导为any的对象访问.item属性时,ESLint就会判定这是不安全的操作,抛出对应报错。
日常写代码时最容易触发这个问题的场景,就是你要访问.item属性的那个对象,根本没有被定义过明确的类型:比如从接口拿回来的响应值没加类型声明、动态传入的函数入参没指定类型、获取DOM元素返回值没做类型断言,最终TypeScript就会把这个对象直接推导成any类型,从而触发校验。
对应修复方案
- 优先给被访问的对象补上完整的TypeScript类型定义,明确标注出对象上包含
item属性、以及item的具体类型,从根源上消除值的any类型推导,让TS能够正常识别这个成员访问操作的合法性。 - 如果临时没法补全完整的类型定义,可以在执行成员访问前加一层类型收窄:比如用
'item' in targetObject的类型守卫先判断属性是否存在,让TypeScript把原本的any类型收窄为包含合法item属性的具体类型,再进行访问。 - 直接写注释
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access跳过这行校验的方式不推荐,这相当于直接绕开了类型检查的保护,很容易把属性不存在、类型不匹配的问题留到运行时才暴露。
内容的提问来源于stack exchange,提问作者Ammamon
相关产品推荐
相关产品推荐

