创建对象Angular的对象4

Cru*_*ine 9 typescript angular

我已经定义了一个接口:

export interface Student {
  name : String;
  section:String;
  phoneNumber:String;
}
Run Code Online (Sandbox Code Playgroud)

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

studentDetails[studentId] 应该是学生类型;

studentDetails[studentId] : Student = [];
Run Code Online (Sandbox Code Playgroud)

我如何使用inteface实现这个?

提前致谢

Arg*_*g0n 12

您可以StudentDetails像这样定义另一个接口:

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

export interface StudentDetails {
  [key: number]: Student; //Or string instead of number
}
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

//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];
Run Code Online (Sandbox Code Playgroud)

UPDATE

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

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
}
Run Code Online (Sandbox Code Playgroud)