TypeScript实现泛型接口报Property 'method'不匹配错误如何解决?
错误原因
你接口里的泛型是声明在方法层级的,泛型的实际类型由调用方传入决定,而非实现类固定。你当前的实现直接写死返回Test类型,无法满足调用方传入任意自定义泛型的接口约定,因此触发类型报错。
解决方案
根据你的业务需求选以下两种方案即可:
方案1:保留调用时自定义泛型的能力
实现方法时保留方法级泛型,通过类型断言兼容自定义类型场景:
class Apple implements IApple { method<T = Test>(): Promise<T> { return Promise.resolve({ a: 10, b: 'test', } as unknown as T) } }
注意:该方案下如果调用方传入的泛型结构和返回值不匹配,运行时可能出现字段缺失问题,需要你自行保证业务逻辑里返回值符合调用方传入的泛型约定。
方案2:泛型移动到接口层级(更安全,推荐大部分场景使用)
如果你的业务场景不需要同一个实例的method方法返回不同类型,只是不同实现类可以自定义返回类型,把泛型挪到接口层级即可:
type Test = { a: number; b: string; } // 泛型声明在接口上,设置默认值 interface IApple<T = Test> { method(): Promise<T> } // 实现接口时默认使用Test类型,不需要额外断言 class Apple implements IApple { method() { return Promise.resolve({ a: 10, b: 'test', }) } } // 需要自定义返回类型的场景,在实现接口时指定泛型即可 type CustomType = { c: boolean; } class CustomApple implements IApple<CustomType> { method() { return Promise.resolve({ c: true }) } }
内容的提问来源于stack exchange,提问作者user1595858
相关产品推荐
相关产品推荐

