打字稿:类型检查正确方法

时间:2019-01-10 19:30:00

标签: javascript typescript prototype

在打字稿中使用诸如类型检查和强类型键入之类的功能时,很多人经常使用类,并且多次使用接口,例如:

班级人

equals

界面人:

class Person{
name: string;
age: number;
}

let users:Person[] = [
    { name: 'david', age: 25 },
    { name: 'paul', age: 54 }
];

此外,我们将它们用作具有Class Person interface Person{ name: string; age: number; } let users:Person[] = [ { name: 'david', age: 25 }, { name: 'paul', age: 54 } ];

的Observables的泛型。

所以我在这里的问题是要知道哪种是正确的类型检查和强类型键入方式

  1. 使用课程
  2. 使用界面

因为人们在打字稿中对此不太了解,所以他们可以互换使用术语类和接口。在许多博客,教程,项目,尤其是Angular项目中,我看到人们感到困惑。

1 个答案:

答案 0 :(得分:2)

实际上,对于您的类而言,它没有很好地实现。

您正在将它们用作接口对象。我的意思是在您的样本中:

let users:Person[] = [
    { name: 'david', age: 25 },
    { name: 'paul', age: 54 }
];

这些是对象,而不是类Person的实例。

这是在接口情况下的正确用法,但在类的情况下,您应该执行以下操作:

const p1 = new Person();
p1.name = 'david';
p1.age = 25;
const p2 = new Person();
p2.name = 'paul';
p2.age = 54;
let users:Person[] = [p1, p2];

通过这种方式,您实际上是在创建Person实例的数组。

关于使用什么,这取决于情况。

接口是直接对象,它们反映您定义的属性。

课程更多。 假设对于每个人,您都需要一种方法来返回您的姓名和年龄。

使用该界面您无法执行此操作。

使用该类,您可以在该类中定义一次方法,然后在所有实例上调用它,例如:

class Person{
  name: string;
  age: number;
  getInfo(): string {
    return `I am ${this.name} of age ${this.age}`;
  }
}

然后您可以在所有实例上调用它,例如:

console.log(p1.getInfo();)

如果您确实希望将它们用作对象属性的类型检查(例如,HTTP请求返回),请使用Interface

如果您需要对这些模型进行额外的操作,请改用Class