gpt4 book ai didi

typescript - 覆盖抽象方法 TypeScript?

转载 作者:行者123 更新时间:2023-12-04 13:21:42 26 4
gpt4 key购买 nike

我有抽象方法:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com