TS中interface和type的区别
2022-12-23 13:32:49    17    0    0
admin

1. 接口(interface)

接口主要用于类型检查,他只是一个结构契约,定义了具有相似的名称和类型的对象结构。除此之外,接口还可以定义方法和事件

2. 类型别名(Type Alias)

不同与intetrface只能定义对象类型,type声明任何类型,包括定义基础类型,联合声明或交叉类型

差异点

  1. 定义类型范围
    interface只能定义对象类型,而type声明可以声明任何类型,包括基础类型、联合类型或交叉类型

    1. //基本数据类型
    2. type person = string
    3. //联合类型
    4. interface Dog {
    5. name: string;
    6. }
    7. interface Cat {
    8. age: number;
    9. }
    10. type animal = Dog | Cat
    11. //元组类型
    12. interface Dog {
    13. name: string;
    14. }
    15. interface Cat {
    16. age: number;
    17. }
    18. type animal = [Dog, Cat]
    19. // 交叉类型
    20. type Person = {
    21. name: string
    22. }
    23. type User = Person & { age: number }
    24. // type & interface
    25. interface Person {
    26. name: string
    27. }
    28. type User = {age: number} & Person
  2. 扩展性
    接口可以extends、implements,从而扩展多个接口或类。类型没有扩展功能

    1. // interface extends interface
    2. interface Person {
    3. name: string
    4. }
    5. interface User extends Person {
    6. age: number
    7. }
    8. // interface extends type
    9. type Person = {
    10. name: string
    11. }
    12. interface User extends Person {
    13. age: number
    14. }

    type可以使用交叉类型&,来使成员类型合并

    1. // type & type
    2. type Person = {
    3. name: string
    4. }
    5. type User = Person & { age: number }
    6. // type & interface
    7. interface Person {
    8. name: string
    9. }
    10. type User = {age: number} & Person
  3. 合并声明
    定义两个相同名称的接口会合并声明
    定义两个同名的type会出现异常

    1. interface Person {
    2. name: string
    3. }
    4. interface Person {
    5. age: number
    6. }
    7. //合并为:interface Person{ name: string, age: number }
  4. typeof
    type可以使用typeof获取实例类型

    1. let div = document.createElement('div');
    2. type B = typeof div

Pre: 用ts定义一个属性二选一的对象

Next: 解决:Another git process seems to be running in this repository, e.g. an editor opened by 'git commit'

17
Sign in to leave a comment.
No Leanote account? Sign up now.
0 comments
Table of content