代码之家  ›  专栏  ›  技术社区  ›  Raz Buchnik

TypeScript为什么使用传统类而不是接口?

  •  -1
  • Raz Buchnik  · 技术社区  · 4 年前

    我可以做到:

    enum DogsKinds {
      Labrador,
      Aski
    }
    
    class Dog {
      name: string;
      kind: DogKinds;
      constructor() {}
    }
    

    然后初始化一个dog对象:

    const dog = new Dog();
    

    然而,我可以对接口做同样的事情:

    interface Dog {
      name: string;
      kind: DogsKind;
    }
    
    const dog: Dog = {
      name: 'some name',
      kind: DogsKinds.Labrador
    }
    

    得到同样的结果——更容易。

    什么时候使用接口,什么时候使用类,有什么区别?有没有最佳实践或经验法则?

    看起来界面更容易使用,如果我错了,请纠正我。

    0 回复  |  直到 4 年前
        1
  •  0
  •   Tobias S.    4 年前

    我认为一个重要的区别是在运行时发现 对象的种类 使用时正在处理 遗产 .

    对于类,您可以使用 instanceof 操作人员

    if (animal instanceof Dog) { /* ... */ }
    

    当您只是将普通对象与TypeScript一起使用时,您必须提供一个额外的属性来在运行时区分类型。

    type AnimalType = 'dog' | 'cat'
    
    interface Dog extends Animal {
      type: 'dog'
      name: string;
      kind: DogsKind;
    }
    
    if (animal.type === 'dog') { /* ... */ }