TypeScript泛型类中出现“Type argument cannot be inferred”错误
解决TypeScript泛型类中BehaviorSubject的类型推断错误
你遇到的这个“Type argument cannot be inferred by usage”错误,本质是TypeScript(以及WebStorm的TS语言服务)对泛型类里的空数组初始值推断不够智能导致的小坑。
当你写new BehaviorSubject<T[]>([])时,空数组[]会被默认推断为never[]类型,而不是你期望的T[]——哪怕T有Bar的约束,TypeScript也没法自动把never[]关联到T[]上,因此编译器会提示无法推断BehaviorSubject的类型参数。
这里有两种简单的解决办法:
方法1:给初始值添加类型断言
直接告诉TypeScript这个空数组就是T[]类型,让它不用再去推断:
import { BehaviorSubject } from 'rxjs/BehaviorSubject'; interface Bar { a: any; } class Foo<T extends Bar> { subject = new BehaviorSubject<T[]>([] as T[]); }
方法2:明确属性的类型定义
在类的属性上显式声明subject的类型为BehaviorSubject<T[]>,这样编译器会直接匹配构造函数的类型参数,不需要再尝试推断:
import { BehaviorSubject } from 'rxjs/BehaviorSubject'; interface Bar { a: any; } class Foo<T extends Bar> { subject: BehaviorSubject<T[]> = new BehaviorSubject<T[]>([]); }
两种方式都能解决WebStorm的错误提示,并且保证subject正确发射T[]类型的数据流。
内容的提问来源于stack exchange,提问作者Myk Willis
相关产品推荐
相关产品推荐

