创建对象Angular的对象4

时间:2017-09-01 06:01:12

标签: angular typescript

我已经定义了一个界面:

export interface Student {
  name : String;
  section:String;
  phoneNumber:String;
}

我想创建一个以studentId为键的Student类型的Object对象。即

studentDetails[studentId]应为Student;

studentDetails[studentId] : Student = [];

我如何使用inteface实现这个?

提前致谢

2 个答案:

答案 0 :(得分:10)

您可以为此StudentDetails定义另一个界面:

export interface Student {
  name: string;
  section: string;
  phoneNumber: string;
}

export interface StudentDetails {
  [key: number]: Student; //Or string instead of number
}

并像这样使用它:

//Valid
let studentDetails: StudentDetails = {
  1: {
    name: 'Test Person1',
    section: 'Section 1',
    phoneNumber: '12345678'
  }
};

//Valid
studentDetails[2] = {
  name: 'Test Person 2',
  section: 'Section 2',
  phoneNumber: '87654321'
};

//Invalid (properties in UpperCase)
studentDetails[3] = {
  Name: 'Test Person 3',
  Section: 'Section 3',
  PhoneNumber: '52376724'
};

//Valid
let student: Student = studentDetails[2];

<强>更新

从你的评论到我的回答,我认为你想要这样的东西:

export interface Student {
  id: number; // Added
  name: string;
  section: string;
  phoneNumber: string;
}

export interface StudentMap {
  [key: number]: Student;
}

let studentMap: StudentMap = {};
let studentDetails: Student[] = [
  {
    id: 56,
    name: 'Test Person1',
    section: 'Section 1',
    phoneNumber: '12345678'
  },
  {
    id: 175,
    name: 'Test Person3',
    section: 'Section 3',
    phoneNumber: '521398763'
  }
];

studentDetails.forEach((s: Student) => {
  studentMap[s.id] = s;
});

for (let i = 0; i < studentDetails.length; i++) {
  console.log(studentMap[studentDetails[i].id].name); // Test Person1, Test Person 3
}

答案 1 :(得分:1)

在评论中,OP已要求将studentID作为关键字,并将StudentDetails作为值。

以下代码可以帮助您,但由于问题本身不明确,请不要在冲动中投票。

首先将studetId添加到界面:

export interface Student {
name : String;
section:String;
phoneNumber:String;
studentID : number;
 }

然后使用学生详细信息创建studentId地图

  students : Student[];
  student1 : Student;

  var studentMap = new Map();

  this.students  = [
  {name : "abc", section :'A', phoneNumber : '123',studentID : 101 },
  {name : "xyz", section :'B', phoneNumber : '456',studentID : 102 },
  {name : "mno", section :'C', phoneNumber : '789',studentID : 103 },

    ];

 for (var item of this.students){
  studentMap.set (item.studentID ,item);
 }

 this.student1 = studentMap.get(101);

请看这个(Plunkr I have created