【问题标题】:Typescript name collision/clash using multiple interface inheritance使用多接口继承的打字稿名称冲突/冲突
【发布时间】:2013-12-16 20:05:56
【问题描述】:

如果在 Typescript 中我有两个接口都具有相同名称的成员,我怎样才能安全地实现这两个接口?这甚至可能吗?

例子:

interface IFace1 {
    name: string;
}
interface IFace2 {
    name: string;
}

class SomeClass extends IFace1, IFace2 {
    // How to implement IFace1.name and IFace2.name ??
}

我知道在 C# 中,由于 C# 在运行时的类型信息,这可以解决和工作,但是 Typescript 呢?

【问题讨论】:

  • TypeScript 无法支持这一点,因为接口是纯编译时机制。生成的 JavaScript 没有接口的概念,接口被擦除。鉴于此,您期望的行为是什么?

标签: c# javascript typescript ecmascript-5


【解决方案1】:

TypeScript 使用结构化类型系统,因此IFace1IFace2 之间绝对没有区别。你可以这样实现它们:

class SomeClass implements IFace1, IFace2 {
    name = 'foo';
}

正如 vcsjones 所提到的,由于没有运行时类型信息,因此没有一种合理的方式可以在名义上起作用。

【讨论】:

  • 是的,我认为会是这样。但是那怎么处理呢?这是一个现实世界的问题。我将创建另一个问题(因为这个问题得到了完美的回答)描述问题并询问如何解决它们;)
  • 背后的概念也很好解释here
猜你喜欢
  • 2013-03-26
  • 2019-09-27
  • 2012-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
相关资源
最近更新 更多