如何用带类泛型、方法无泛型参数的类封装含泛型方法的类?
解决方案:将父类方法泛型迁移至子类类泛型
首先修正你的Smart类实现,解决返回值缺失和泛型传递的问题:
class Stupid { private cache: Map<any, any> = new Map(); get<T>(key: string): T { return this.cache.get(key); }; } class Smart<T> extends Stupid { get(key: string): T { // 显式传入子类的泛型参数T给父类方法,并返回结果 return super.get<T>(key); } }
关键点说明:
- 原代码中
Smart.get方法漏掉了return语句,导致返回值类型不符合预期,必须补上才能正确返回父类方法的结果 - 通过
super.get<T>(key)将子类的类泛型参数T传递给父类的方法泛型,实现了「把方法泛型移到封装类上」的需求 - 由于父类
Stupid的缓存是Map<any, any>,运行时不会做类型校验,Smart类的泛型T仅提供编译时类型提示,需要自行保证缓存中对应key的值类型匹配T
内容的提问来源于stack exchange,提问作者Andrei Bereczki
相关产品推荐
相关产品推荐

