Arrays 类型脚本数组分配错误
我有这门课: user.tsArrays 类型脚本数组分配错误,arrays,typescript,Arrays,Typescript,我有这门课: user.ts const ADMIN = 1; const AGENT = 2; const ADJUSTER = 3; const MANAGER = 4; const MOTORCYCLIST = 5; export class User { id: number; name: string; email: string; phone: string; status: string; role: number; isAdmin(): boole
const ADMIN = 1;
const AGENT = 2;
const ADJUSTER = 3;
const MANAGER = 4;
const MOTORCYCLIST = 5;
export class User {
id: number;
name: string;
email: string;
phone: string;
status: string;
role: number;
isAdmin(): boolean {
return this.role === ADMIN;
}
isAgent(): boolean {
return this.role === AGENT;
}
isAdjuster(): boolean {
return this.role === ADJUSTER;
}
isManager(): boolean {
return this.role === MANAGER;
}
isMotorcyclist(): boolean {
return this.role === MOTORCYCLIST;
}
}
import { User } from '../models/user';
export const USERS: User[] = [{"id":301,"name":"Shirlee Zboncak","email":"kenyatta_jerde@erdman.ca","phone":"044 93 1342 0977","status":"inactive","role":3},{"id":302,"name":"Erich Auer","email":"grazyna.romaguera@bogisich.name","phone":"044 87 8444 6879","status":"inactive","role":2},{"id":303,"name":"Jerrold McDermott","email":"lindsey_brekke@beierdickinson.info","phone":"044 64 7490 1751","status":"inactive","role":3},{"id":304,"name":"Yael Hilpert","email":"stanton.abbott@pouros.co.uk","phone":"044 16 9190 7970","status":"inactive","role":4},{"id":305,"name":"Pat Hodkiewicz","email":"elin@sanford.biz","phone":"044 12 0242 7692","status":"inactive","role":3}]
出于测试原因,我使用了一个mock users数组(为了简单起见,我将显示一个只有5个用户的数组,但在我的代码中我有1000多个用户):
模拟用户。ts
const ADMIN = 1;
const AGENT = 2;
const ADJUSTER = 3;
const MANAGER = 4;
const MOTORCYCLIST = 5;
export class User {
id: number;
name: string;
email: string;
phone: string;
status: string;
role: number;
isAdmin(): boolean {
return this.role === ADMIN;
}
isAgent(): boolean {
return this.role === AGENT;
}
isAdjuster(): boolean {
return this.role === ADJUSTER;
}
isManager(): boolean {
return this.role === MANAGER;
}
isMotorcyclist(): boolean {
return this.role === MOTORCYCLIST;
}
}
import { User } from '../models/user';
export const USERS: User[] = [{"id":301,"name":"Shirlee Zboncak","email":"kenyatta_jerde@erdman.ca","phone":"044 93 1342 0977","status":"inactive","role":3},{"id":302,"name":"Erich Auer","email":"grazyna.romaguera@bogisich.name","phone":"044 87 8444 6879","status":"inactive","role":2},{"id":303,"name":"Jerrold McDermott","email":"lindsey_brekke@beierdickinson.info","phone":"044 64 7490 1751","status":"inactive","role":3},{"id":304,"name":"Yael Hilpert","email":"stanton.abbott@pouros.co.uk","phone":"044 16 9190 7970","status":"inactive","role":4},{"id":305,"name":"Pat Hodkiewicz","email":"elin@sanford.biz","phone":"044 12 0242 7692","status":"inactive","role":3}]
问题是,该代码在以下情况下失败:
在我的编辑器中,它显示了另一条消息:
Missing property 'isAdmin' on type '{ "id": number; "name": string; "email": string; "phone": string; "status": string; "role": numbe...'.
如何使我的用户类不尝试分配方法。我只想分配那些id、姓名、电子邮件、电话、状态和角色属性。我尝试使用构造函数,但错误相同。您可以将构造函数添加到类中,然后只映射数组:
constructor(id,name,email,phone,status,role) {
this.id = id;
//...etc
}
然后
你说你试过使用构造函数,但也许你做得不对 这里有一个方法可以解决你的问题。首先,创建一个接口来统一构建
user
对象所需的用户数据
export interface UserData {
id: number;
name: string;
email: string;
phone: string;
status: string;
role: number;
}
然后在User
类定义中,声明一个类型为UserData
的字段,该字段将保存用户数据
export class User {
data: UserData;
constructor(userData: UserData) {
this.data = userData;
}
isAdmin(): boolean {
return this.data.role === ADMIN;
}
// + all other method declarations
}
如果不想将用户数据存储到类型为UserData
的字段中,可以使用构造函数中的接口,如下所示:
export class User {
id: number;
name: string;
email: string;
phone: string;
status: string;
role: number;
constructor(userData: UserData) {
this.id = userData.id;
this.name = userData.name;
// etc.
}
isAdmin(): boolean {
return this.role === ADMIN;
}
}
然后,您可以使用new
关键字和构造函数实例化User
类中的对象,构造函数将UserData
对象作为参数
export const USERS: User[] = [
new User({
id: 301,
name: "Shirlee Zboncak",
email: "kenyatta_jerde@erdman.ca",
phone: "044 93 1342 0977",
status: "inactive",
role: 3
})
];
现在您可以创建
User
对象,而无需指定方法定义。“我曾尝试使用构造函数,但错误相同。”我对此表示怀疑;请告诉我们。@jcalz发生的事情是,我刚刚创建了构造函数,但没有做任何其他事情。这看起来是一种非常酷的方法。我会使用它,我会让你知道它是否适合我。如果你想保留现有的类声明字段结构,我会添加一个替代类定义。谢谢!我想知道怎么做。我试过你的方法,效果很好!