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

Typescript: Type checking correct way

在打字稿中使用类型检查和强类型等功能,很多时候人们使用 class 和很多时候的界面,比如:

Class 人

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 的泛型用作 Observale<Person>

所以我的问题是知道哪种是类型检查和强类型的正确方法

  1. 使用class
  2. 使用界面

因为人们在打字稿中对此不是很清楚,他们可以互换使用术语 class 和界面。在许多博客、教程、项目中,尤其是 Angular 项目中,我看到人们感到困惑。

其实你这个class的情况,并没有很好的实现。

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

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

这些是对象,而不是 class Person.

的实例

在接口的情况下这是正确的用法,但在 classes 的情况下你应该这样做:

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 个实例的数组。

关于使用什么,这真的取决于具体情况。

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

类 还有更多。 假设对于每个人,您都需要一个方法,其中 returns 您的姓名和年龄。

使用界面你无法做到这一点。

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

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

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

console.log(p1.getInfo();)

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

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