抽象类和打字稿接口之间有什么区别?

时间:2019-05-31 17:19:12

标签: typescript

我是编程新手。不能理解抽象类和Typescript接口之间的区别吗?

2 个答案:

答案 0 :(得分:0)

主要区别之一是接口正好告诉您数据的“形状”。接口根本不生成任何JavaScript代码。参见the code vs. the generated JS code here

一个抽象类定义为:

  

抽象类是可以从中派生其他类的基类。它们可能无法直接实例化。与接口不同,抽象类可能包含其成员的实现详细信息。 abstract关键字用于定义抽象类以及抽象类中的抽象方法。

通过:https://www.typescriptlang.org/docs/handbook/classes.html

使用常规类,您可以像这样创建一个new实例

class MyClass {
    constructor() {}
}

var a = new MyClass();

所以这意味着您不能new抽象类,您会得到一个错误

abstract class MyAbstractClass {
    constructor() {}
}

var a = new MyAbstractClass();  //error! "Cannot create an instance of an abstract class.
"

抽象类旨在用作“基类”,例如:

abstract class Animal {
    constructor(public legs: number, public sound: string) {
        console.log(`I have ${this.legs} legs and I say "${this.sound}"!`)
    }
}

class Dog extends Animal {
    constructor() {
        super(4, 'bark');
    }
}

class Cat extends Animal {
    constructor() {
        super(4, 'meow');
    }
}

var a = new Dog();//Logs: I have 4 legs and I say "bark"!
var b = new Cat();//Logs: I have 4 legs and I say "meow"!

答案 1 :(得分:0)

抽象类在运行时可用,在编译时提供接口。例如,我们不能将instanceof与接口一起使用。

let u: any;
var IsExpressionValid = x instanceof IUser; //This will give error.
var IsExpressionValid = x instanceof User; //This will not.