【发布时间】:2016-10-14 00:52:11
【问题描述】:
我正在阅读接口和类型断言。一直在看类似的页面:
- Typescript parse json with class and interface
- How do I cast a json object to a typescript class(这个跟TS没关系!)
- Parse complex json objects with Typescript
- TS doc about interfaces
我已经掌握了窍门,而且理解基础知识非常简单。虽然:当涉及 HTTP 时,我无法找到如何将 JSON 对象键入到我在应用程序中使用的对象。
例如,我有一个教师对象数组。每个教师都有一个 id、名字和一个学生数组。我有另一个班级学生,其中包含他们的属性......等等。
在我读到的那些链接的某个地方,除非您需要对对象执行操作,否则只有一个接口就足够了。但是除非您想对 Object 执行操作,否则您需要一个单独的类?
我实际的教师课程从...开始:
export class Teacher {
private students: Array<Student>;
constructor(public id: string, public name: string) {
this.students = new Array<Student>();
}
public getStudents(): Array<Student> {
return this.students;
}
}
首先,如果我想将 JS 对象强制转换(或断言类型)为 Teacher 对象,代码会是什么样子?
现在我的代码看起来像这样:
服务:
getTeachers() {
return this.http.get('someUrl')
.map((res: Response) => res.json())
}
组件(Angular 2 组件):
export class ListComponent implements OnActivate {
id: string;
name: string;
teachers: Teacher[];
constructor(public _service: Service, public _router: Router) {
}
routerOnActivate(): void {
this._service.getTeachers()
.subscribe(teachers => this.teachers = teachers);
}
我的界面如下所示:
export interface TeacherJSON {
id: string,
name: string,
students: Array<Student>;
}
如果上面的接口还不足以对对象执行动作,我该如何前进?我确实了解到您可以向界面添加方法,例如:
interface Thing {
a: number;
b: string;
foo(s: string, n: number): string;
}
process(x: Thing) {
return x.foo("abc");
}
我确实理解上面的例子,但我想 http、映射和订阅让我失望,我不知道如何在我的代码中实现它!
【问题讨论】:
标签: json http typescript angular