typescript - 覆盖抽象方法 TypeScript?

标签 typescript typescript2.0

我有抽象方法:

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/

相关文章:

javascript - 测量 untyped-javascript -> typescript 转换进度?

typescript - 获取字符串文字类型值的数组

javascript - 我怎样才能让 webpack 找到 Angular 模块?

angular - 使用 Visual Studio 构建 Angular2 应用程序时出错

css - 如何将来自 ajax 查询的固定 CSS 文本添加到 Angular 2 应用程序?

object - typescript : how to create a typed object without passing all the properties

typescript - 在 Visual Studio 中使用 angular2

TypeScript 编译建议(TS + gulp + karma)

angularjs - 在已解决的 promise 中返回一个 Observable

css - 在 Highcharts 中突出显示 x 轴标签