1、我们如何知道如何选择使用接口还是抽象类? 2、有了interface,还有abstract class 存在的必要吗? 3、我们使用interface好还是选择abstract class好?

typescript 中,我们可以用class 实现接口(interface),也可以用class 扩展抽象类(abstract class),

但是:
1、我们如何知道如何选择使用接口还是抽象类?
2、有了interface,还有abstract class 存在的必要吗?
3、我们使用interface好还是选择abstract class好?

阅读 2k
1 个回答
  • 接口没有具体实现、只有成员签名;抽象类可以有具体实现。
  • 接口没有构造函数;抽象类可以有构造函数。
  • 接口成员只能是 public 的;抽象类成员可以是 public/protected/private 的。
  • 接口可以 extends 多个;抽象类只能 implements 一个。
  • interface 编译成 JS 后就没有了;abstract class 编译后就是 JS 里的 class。

区别的话大概就这些。

你要是真·OOP 开发,编译后你希望在 JS 里也保留 class(比如你是开发一个库,别人引用后也能 new 对象出来的),那就用 abstract class。

不过绝大部分情况下,我们用 TypeScript 仅仅是为了类型声明、从而带来更好的 IDE 智能提示,这种情况下 interface+type 可以满足 99% 的场景了。

推荐问题
logo
Microsoft
子站问答
访问
宣传栏