我有抽象方法:
abstract setProp<T, K extends keyof T>(value: keyof T, key: K);
我试图在类继承人中覆盖它:
public setProp<IParentProfile, K extends keyof IParentProfile>(value: keyof IParentProfile, key: K) {
this.model[key] = value;
}
但是解释告诉我一个错误:
抽象类的覆盖方法不兼容,我哪里出错了?
我也这样试过:
abstract setProp<T, K extends keyof T>(model: T, value: keyof T, key: K): T;
并使用:
public setProp<IParentProfile, K extends keyof IParentProfile>(model: IParentProfile, value: keyof IParentProfile, key: K) {
return model[key] = value;
}
你能明白为什么会这样吗 not work please
最佳答案
正如我在评论中所说,它看起来像是一个编译器错误。 (这只是解决无法覆盖您的泛型方法的问题,而不是您稍后在链接中添加的代码。)
以下是当前 TypeScript 2.9 及以下版本中的错误:
class A {
m<T, U extends T>(t: T, u: U) { }
}
class B extends A {
m<T, U extends T>(t: T, u: U) { }
//^--error, T is not assignable to T
}
如果它是 generic constraints use type parameters,您似乎无法覆盖泛型方法。 .
我提交了 Microsoft/TypeScript#25373它已(截至 2018-07-02)被归类为错误,计划在 TypeScript 3.1 中解决。
在那之前,我想您需要使用变通办法。实际上,我能找到的唯一可以让您使用类型参数约束覆盖 abstract
泛型方法的解决方法是 sledgehammer解决方法,@tsignore
comment :
class A {
m<T, U extends T>(t: T, u: U) { }
}
class B extends A {
// @ts-ignore
m<T, U extends T>(t: T, u: U) { } // no error
}
我通常不推荐使用@ts-ignore
,因为它所做的只是抑制错误输出;它不会神奇地修复任何东西。但假设编译器错误在不久的将来得到修复,这是一个合理的临时修复。
希望对您有所帮助;祝你好运!
关于typescript - 覆盖抽象方法 TypeScript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51137379/