扩展类的接口的预期用途

时间:2015-01-15 16:16:46

标签: typescript

TypeScript 0.9+似乎为接口扩展类提供了如下功能:

class Foo implements IFoo {
    /**
     * This is bar
     */
    bar = 2;
}

interface IFoo extends Foo { }

var x: IFoo,
    y: Foo = new Foo();

有没有人知道此功能的意图?

根据我的经验,我从中获得的最大价值是在IDE(例如VS)中,它允许我在键入x.bary.bar时看到JSDoc。这非常有用,因为它避免了必须具有基本相同的属性/方法的重复文档。

由于文档方面的巨大优势,我倾向于迁移一堆接口来使用这种风格,但是我不希望做任何可能在某些时候从编译器中取出的东西,或者可能引起其他问题。关于这个功能,有什么我应该知道的吗?我应该知道这个功能的其他有用结果吗?

2 个答案:

答案 0 :(得分:1)

我不知道这是否是实际意图,但它确实提供了一种实现多重继承的简单方法,而无需为此目的创建3个虚假接口:

class Tractor {
....
}

class Trailer {
    ....
}


interface ITractorTrailer extends Tractor, Trailer {} 

class TractorTrailer implements ITractorTrailer {
    ....
}

答案 1 :(得分:1)

  

有没有人知道此功能的意图?

只是因为它允许您捕获接口中类的类型信息。

  

但我不想做任何可能在某些时候从编译器中删除的事情,或者可能导致其他问题

它是 stabalized 语言规范的一部分。请参阅7.1 http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf

部分
InterfaceDeclaration:
   interface Identifier TypeParametersopt InterfaceExtendsClauseopt ObjectType
InterfaceExtendsClause:
   extends ClassOrInterfaceTypeList

明确ClassOrInterfaceTypeList