Typescript类不会影响接口类型

时间:2019-02-03 08:26:57

标签: typescript class types interface

interface IFoo {
  method: (ha: string) => void;
}

class Foo implements IFoo {
  public method(ha) {}
}

在类方法中将'ha'参数悬停在

  

参数“ ha”隐式具有“ any”类型,但更好的类型可能是   从使用情况推断出

由于该类可改善接口,因此它不应该与接口类型匹配吗?如果您尝试为参数“ ha”赋予与字符串不同的类型(例如数字),则会错误地指出它无法分配给字符串类型,这很有意义。

那么,为什么我需要在接口和类中都分配ha类型?这是预期的行为吗?

1 个答案:

答案 0 :(得分:4)

当前,TypeScript不支持。

您可以在此处了解更多信息:https://github.com/Microsoft/TypeScript/issues/23911

这不是简单的任务。

这是因为TypeScript是基于JavaScript构建的,并且没有像其他语言(如C#)那样的接口分辨率。

为了给您一些基本的概念,假设您有两个接口XY都具有相同的方法但类型不同:

interface X { foo(i: string): string }
interface Y { foo(x: number): number }

在创建同时实现这两个接口的类时,不能像这样将接口组合在一起:

class K implements X, Y {
  // error: this does not satisfy either interfaces.
  foo(x: number | string): number | string {
    return x
  }
}

对于这个简单的示例,您需要:

class K implements X, Y {
  foo(x: number): number
  foo(x: string): string
  foo(x: number | string): number | string {
    return x
  }
}

即使那样也不理想,因为它不强制输入类型将匹配输出类型。