Typescript:Generic Type使用Extends关键字而不是Implements with interface

时间:2016-06-03 22:58:15

标签: generics typescript

据我所知,一个对象可以实现一个接口,一个对象可以扩展一个类。

但是,使用泛型类型时,必须使用extends来表示对象必须实现接口。

例如:

interface ITest {
    a:number;
}

function myF1<U extends ITest>(a:U){}    //valid
function myF2<U implements ITest>(a:U){} //error

这种不一致是否有原因?使用implements对我来说更有意义。

1 个答案:

答案 0 :(得分:4)

  

对象可以实现接口,对象可以扩展类

一个类可以实现一个接口,一个类可以扩展一个类。接口也可以扩展接口(即,类型可以扩展类型),这与扩展其他类的类一致。这就是在这里发生的事情:当你写U extends ITest时,你说通用类型U扩展了类型ITest

此外,在TypeScript中,定义类时:

class Foo {}

...你实际上指的是两件事:第一,你说你想要一些代码(标准构造函数),第二,你指的是一个名为Foo的类型,你可以用它作为如果它是一个界面,因为它几乎就是它。 (在某种意义上,类只是一个接口加上一些代码。)