TS报错Property 'strCategory' does not exist on type 'never'求解
TypeScript 报错
Property 'strCategory' does not exist on type 'never' 排查指南 报错本质
never是TypeScript的特殊底层类型,代表逻辑上永远不可能存在的值,该类型上不存在任何可访问的属性、方法。
这个报错的直接含义是:你尝试访问strCategory属性的目标变量,被TypeScript的类型系统推断为never类型,因此属性访问被判定为非法。
常见触发场景
- 变量声明时既没有设置初始值,也没有显式标注类型,后续的条件判断逻辑把所有可能的类型分支全部排除,最终变量类型被收窄为
never - 数组未标注正确类型,被TS隐式推断为
never[],调用find、filter、下标取值时拿到的元素自然为never类型 - 联合类型、枚举类型做
switch/if分支判断时,所有已知类型分支都被覆盖,走到逻辑兜底分支时,变量会被自动推断为never - 异步接口、第三方函数的返回值没有显式标注类型,TS无法从上下文推导返回结构,在严格模式下被推断为
never - 数组
reduce等方法传入的初始值未标注类型,被TS推断为never,后续操作初始值属性时报错
修复步骤
- 定位报错行对应的目标变量,在编辑器中悬停查看TS的实时类型提示,确认该变量确实被标记为
never - 对应场景修复类型问题:
- 针对数组、对象取值场景:提前定义数据结构类型,显式给变量、数组标注正确类型,不要依赖错误的隐式推断:
// 先定义数据对应的类型结构 interface Category { strCategory: string; strCategoryThumb?: string; strCategoryDescription?: string; [key: string]: any; // 预留其他未知字段 } // 给数组显式标注类型,避免被推成never[] const categoryList: Category[] = []; // 此时find返回结果类型为 Category | undefined,不会是never const target = categoryList.find(item => item.strCategory === 'Beef'); - 针对类型收窄导致的
never:检查前面的分支判断逻辑是否有错误,是否误把合法的类型分支提前排除;如果是理论上永远不会走到的兜底分支,可以通过类型断言手动修正类型 - 针对异步请求、第三方方法返回值:给方法调用加泛型、或者给接收返回值的变量显式标注预期类型,不要让TS做无上下文的盲推断
- 针对未赋值变量:要么给符合预期类型的初始值,要么显式声明变量类型,避免TS推成
never
- 针对数组、对象取值场景:提前定义数据结构类型,显式给变量、数组标注正确类型,不要依赖错误的隐式推断:
- 注意:如果开启了
strictNullChecks规则,find这类可能返回undefined的结果,需要先做非空校验再访问属性,避免触发额外的类型报错:if (target) { // 此处target被收窄为Category类型,可正常访问strCategory console.log(target.strCategory); }
内容的提问来源于stack exchange,提问作者Cyrine ch
相关产品推荐
相关产品推荐

