我是编程新手。不能理解抽象类和Typescript接口之间的区别吗?
答案 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.