我正在关注Angular的官方文件The Tour of Heroes
。我改变了一点。现在有两种不同的方法可以编写如下所示的类:
export class User {
url: string;
id: number;
username: string;
email?: string;
images: string[];
files?: number[];
password?: string;
first_name?: string;
last_name?: string;
}
这是编写用于验证User
正确性的类的原始方法,我也可以像这样创建一个新的User
:
newUser: User = {url: '', id: 0, username: 'Alpha', images: []};
我最近找到了一种写课的新方法:
export class Image {
constructor(
public id: number,
public created: string,
public userId: number,
public fileUrl: string,
public owner: string,
public des?: string,
) { }
}
我可以像这样创建一个新的Image
:
newImage = new Image(50, '20170822', 12, '', 'Belter');
我想问一下它们之间有什么区别,哪个更好用。
答案 0 :(得分:1)
在第一种情况下,您实际上并未实例化User类。您为变量分配符合User类形状的对象文字。由于Typescript具有结构类型系统,因此允许(对象的形状不是声明的类型)
如果您的类只包含数据,那么最好定义一个接口并为其分配对象文字。这更接近于Javascript的做事方式。将它声明为接口而不是类更好,因为instanceof运算符可能会给您带来意想不到的结果。例如,在您的第一个代码段newUser instanceof User
中将为false,因为您指定的对象文字不是User类的实例。 instanceof会给接口带来编译时错误,因为它们在Javascript中并不存在。
export interface User {
url: string;
id: number;
username: string;
email?: string;
images: string[];
files?: number[];
password?: string;
first_name?: string;
last_name?: string;
}
var newUser: User = { url: '', id: 0, username: 'Alpha', images: [] };