覆盖抽象方法 TypeScript?
Override abstract method TypeScript?
我有抽象方法:
abstract setProp<T, K extends keyof T>(value: keyof T, key: K);
我试图在 class 继承人中覆盖它:
public setProp<IParentProfile, K extends keyof IParentProfile>(value: keyof IParentProfile, key: K) {
this.model[key] = value;
}
但是解释告诉我一个错误:
来自抽象 class 的不兼容覆盖方法,我哪里出错了?
我也这样试过:
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
正如我在评论中所说,它看起来像是一个编译器错误。 (这只是解决无法覆盖您的通用方法的问题,而不是您稍后在 link 中添加的代码。)
以下是目前 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 of workarounds, the @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
,因为它所做的只是抑制错误输出;它不会神奇地修复任何东西。但假设编译器错误在不久的将来得到修复,这是一个合理的临时修复。
希望对您有所帮助;祝你好运!
我有抽象方法:
abstract setProp<T, K extends keyof T>(value: keyof T, key: K);
我试图在 class 继承人中覆盖它:
public setProp<IParentProfile, K extends keyof IParentProfile>(value: keyof IParentProfile, key: K) {
this.model[key] = value;
}
但是解释告诉我一个错误:
来自抽象 class 的不兼容覆盖方法,我哪里出错了?
我也这样试过:
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
正如我在评论中所说,它看起来像是一个编译器错误。 (这只是解决无法覆盖您的通用方法的问题,而不是您稍后在 link 中添加的代码。)
以下是目前 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 of workarounds, the @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
,因为它所做的只是抑制错误输出;它不会神奇地修复任何东西。但假设编译器错误在不久的将来得到修复,这是一个合理的临时修复。
希望对您有所帮助;祝你好运!