打字稿:类型检查的正确方法
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>
所以我的问题是知道哪种是类型检查和强类型的正确方法
- 使用class
- 使用界面
因为人们在打字稿中对此不是很清楚,他们可以互换使用术语 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
。
在打字稿中使用类型检查和强类型等功能,很多时候人们使用 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>
所以我的问题是知道哪种是类型检查和强类型的正确方法
- 使用class
- 使用界面
因为人们在打字稿中对此不是很清楚,他们可以互换使用术语 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
。