在C#中,接口和类之间有很大的区别。事实上,类表示引用类型,因此我们可以创建基于该类的对象,而接口旨在是一种合同,类签署该合同以确保某种行为的存在。特别地,我们不能创建接口的实例。
使用接口的整个重点在于公开行为。通过提供所述行为的一个显式实现,类来实现它。
在这种情况下,尽管接口可能包含属性,但大多数情况下,我们关心接口是因为行为问题。所以,在大多数情况下,接口只是行为的合同。
然而,在TypeScript中,我看到了一些让我感到不安的内容,实际上我不止一次看到过这样的情况,这也是我提出这个问题的原因。
在一个教程中,我看到了以下内容:
export interface User {
name: string; // required with minimum 5 chracters
address?: {
street?: string; // required
postcode?: string;
}
}
但是等一下。为什么User
是一个接口?如果我们像C#那样思考,User
不应该是一个接口。实际上,看起来我们正在定义数据类型User
,而不是行为契约。
像我们在C#中所做的那样思考,自然的事情应该是这样的:
export class User {
public name: string;
public address: Address;
}
export class Address {
public street: string;
public postcode: string;
}
但是在TypeScript中,像我们在类中使用接口定义数据类型而不是行为契约的方式似乎非常普遍。
那么,在TypeScript中接口的作用是什么?为什么人们像在C#中使用类一样在TypeScript中使用接口?接口应该如何正确地使用:是用于建立行为契约,还是定义属性和对象应具有的属性?
IUser
的情况下执行new IUser()
,所以从我的角度来看,如果你能更具体地说明什么让你感到困惑,那就太好了。是“嵌套内联”接口还是可选属性? - nozzleman