Typescript无需明确泛型具体类型时有无类似Java<?>替代any的写法
TypeScript没有和Java <?>完全一致的原生通配符语法,可通过以下几种方案实现等价效果,均不需要全局关闭ESLint的any禁用规则:
- 方案1:给函数添加带约束的泛型参数(最通用的标准写法)
直接给函数本身声明符合泛型约束的参数,不需要修改原有业务逻辑,类型校验完全合法,也不会触发告警:function doSimpleThings<T extends ElaborateStuff>(stuff: SomeStuff<T>): void { // 原有逻辑保持不变 } - 方案2:直接传入约束基类作为泛型参数
绝大多数普通使用场景下SomeStuff的泛型为协变,直接传入基类ElaborateStuff即可满足类型要求:function doSimpleThings(stuff: SomeStuff<ElaborateStuff>): void {...} - 方案3:使用infer实现匿名通配符(TS 4.7及以上版本支持)
写法更贴近Java通配符,不需要给函数额外声明泛型参数:function doSimpleThings(stuff: SomeStuff<infer _ extends ElaborateStuff>): void {...} - 方案4:单行禁用ESLint规则
如果你不想修改类型定义,可以只针对当前行关闭any告警,不会影响全局规则生效:// eslint-disable-next-line @typescript-eslint/no-explicit-any function doSimpleThings(stuff: SomeStuff<any>): void {...}
内容的提问来源于stack exchange,提问作者Harald
相关产品推荐
相关产品推荐

