Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 类型脚本数组分配错误_Arrays_Typescript - Fatal编程技术网

Arrays 类型脚本数组分配错误

Arrays 类型脚本数组分配错误,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

我有这门课:

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(): 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发生的事情是,我刚刚创建了构造函数,但没有做任何其他事情。这看起来是一种非常酷的方法。我会使用它,我会让你知道它是否适合我。如果你想保留现有的类声明字段结构,我会添加一个替代类定义。谢谢!我想知道怎么做。我试过你的方法,效果很好!