Typescript类没有实现接口类型。

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

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

在类方法中悬停“ha”参数会显示以下信息:

参数“ha”隐含地具有“any”类型,但可以从使用中推断出更好的类型。

既然该类实现了接口,它不应该匹配接口类型吗?如果您尝试将参数“ha”赋予与字符串不同的类型,例如数字,则会出现错误,因为它不能分配给字符串类型,这是有道理的。

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

1个回答

5

目前,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
  }
}

即使如此也不是最理想的,因为它不能强制输入类型和输出类型匹配。


TypeScript文档的相关部分:https://www.typescriptlang.org/docs/handbook/2/classes.html#cautions - T.J. Crowder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接