我可以在打字稿中将一个界面继承到另一个界面吗?如何访问继承接口中定义的属性?

时间:2017-10-04 12:23:39

标签: angular typescript

两个界面首先是ICat,第二个是IMammalIMammal延伸ICatCat中的IMammal属性是否有能力访问ICat接口的所有属性?

export interface ICat {
    Cateye: string[];
    Color: string;    
    Name: string;
}

export interface IMammal extends ICat {
    Description: string;
    HasImage: boolean;   
    CatGroup: string[];
    **Cat: ICat[]**;
}

基本上,我如何在Typescript中实现多个接口继承?

2 个答案:

答案 0 :(得分:7)

我想也许ICat应该扩展IMammal,因为Cat是一个哺乳动物,哺乳动物不需要任何ICat引用,想想如果你想有一天添加IDog:

export interface IMammal {
    Description: string;
    HasImage: boolean;   
}

export interface ICat extends IMammal {
    Cateye: string[];
    CatGroup: string[];
    Color: string;    
    Name: string;
}

class Cat implements ICat {
    Cateye: string[];
    Color: string;    
    Name: string;
    Description: string;
    HasImage: boolean;   
    CatGroup: string[];
 }

const pusur:ICat = new Cat();
pusur.Name = "Pusur";
pusur.Description = "Likes lasagna";
pusur.CatGroup = ["Cartoon cat"];

答案 1 :(得分:1)

您对接口使用implements,使用extends进行类继承。 implements允许您传递由类实现的接口列表。

请注意,通常它不重要,因为实现接口的所有属性和方法的类自动与接口兼容,无论它是否明确implements接口,但列出显式接口至少意味着编译器会告诉您是否未能正确实现它们。

interface A {
    a: string;
}

interface B {
    b: string;
}

class Foo implements A,B {
  a: string;
  b: string;
}

function foo(b: B) {}
function bar(a: A) {}

const f = new Foo();
foo(f);
bar(f);