如何将json映射到angular7中的接口?
我正在使用angular7,我想将json映射到我的接口。 我需要一个函数来将json字段映射到接口,并且如果json的值与inteeface不兼容,则返回错误如何将json映射到angular7中的接口?,angular,typescript,Angular,Typescript,我正在使用angular7,我想将json映射到我的接口。 我需要一个函数来将json字段映射到接口,并且如果json的值与inteeface不兼容,则返回错误 export interface User { firstName: string; lastName: string; phoneNumber: number; }; const json = { firstName: 'Paresh', lastName: 'Gami', phoneNumber: 'num
export interface User {
firstName: string;
lastName: string;
phoneNumber: number;
};
const json = {
firstName: 'Paresh',
lastName: 'Gami',
phoneNumber: 'num'
};
在我的示例中,电话号码的类型不可分配给接口。我想知道如何管理坏数据
export interface User {
firstName: string;
lastName: string;
phoneNumber: number;
};
const json = {
firstName: 'Paresh',
lastName: 'Gami',
phoneNumber: 'num'
};
var result:User = {};// initialize your result as an empty object of type "User"(interface)
那么
那么
正如@pascalpuetz所述,运行时中不存在Typescript接口。TS将被编译成JS,您知道,JS是一种非常动态的语言,对象没有类型,可以随时动态更改 如果仍然需要映射,则需要添加一个类并映射属性:
export interface IUser {
firstName: string;
lastName: string;
phoneNumber: number;
};
export class User implements IUser {
firstName: string;
lastName: string;
phoneNumber: number;
constructor(json: IUser) {
this.firstName = json.firstName;
this.lastName = json.lastName;
this.phoneNumber = json.phoneNumber;
}
}
const json = {
firstName: 'Paresh',
lastName: 'Gami',
phoneNumber: 'num'
};
...
const result = new User(json);
在分配某些json的情况下,如:
const result = new User({
firstName: 'Paresh',
lastName: 'Gami',
phoneNumber: 'num'
});
const json: IUser = await fetch('someurl');
const result = new User(json);
Typescript将显示一个错误,即属性phoneNumber
的类型不可分配。
但在分配匿名json的情况下,如:
const result = new User({
firstName: 'Paresh',
lastName: 'Gami',
phoneNumber: 'num'
});
const json: IUser = await fetch('someurl');
const result = new User(json);
这是有效的,在运行时(在服从JS之后),它不会考虑JSON是否具有正确的属性。 JavaScript将分配json具有的任何属性。因此,您必须自己比较属性的类型
constructor(json: IUser) {
if (typeof json.firstName === 'string') {
this.firstName = json.firstName;
} else {
throw 'Bad Data';
}
...
}
正如@pascalpuetz所述,运行时中不存在Typescript接口。TS将被编译成JS,您知道,JS是一种非常动态的语言,对象没有类型,可以随时动态更改 如果仍然需要映射,则需要添加一个类并映射属性:
export interface IUser {
firstName: string;
lastName: string;
phoneNumber: number;
};
export class User implements IUser {
firstName: string;
lastName: string;
phoneNumber: number;
constructor(json: IUser) {
this.firstName = json.firstName;
this.lastName = json.lastName;
this.phoneNumber = json.phoneNumber;
}
}
const json = {
firstName: 'Paresh',
lastName: 'Gami',
phoneNumber: 'num'
};
...
const result = new User(json);
在分配某些json的情况下,如:
const result = new User({
firstName: 'Paresh',
lastName: 'Gami',
phoneNumber: 'num'
});
const json: IUser = await fetch('someurl');
const result = new User(json);
Typescript将显示一个错误,即属性phoneNumber
的类型不可分配。
但在分配匿名json的情况下,如:
const result = new User({
firstName: 'Paresh',
lastName: 'Gami',
phoneNumber: 'num'
});
const json: IUser = await fetch('someurl');
const result = new User(json);
这是有效的,在运行时(在服从JS之后),它不会考虑JSON是否具有正确的属性。 JavaScript将分配json具有的任何属性。因此,您必须自己比较属性的类型
constructor(json: IUser) {
if (typeof json.firstName === 'string') {
this.firstName = json.firstName;
} else {
throw 'Bad Data';
}
...
}
接口是编译时构造。它们在运行时不存在,用于描述对象的结构。在TS中,接口是隐式实现的。因此,任何适合接口的对象都属于该类型,而不需要您显式地执行任何操作。您的代码已经正确,json类型为User。接口是编译时构造。它们在运行时不存在,用于描述对象的结构。在TS中,接口是隐式实现的。因此,任何适合接口的对象都属于该类型,而不需要您显式地执行任何操作。您的代码已经正确,json类型为User。在我的示例中,电话号码的类型不可分配给interface。我想知道如何管理坏数据在我的示例中,电话号码的类型不可分配给接口。我想知道如何管理坏数据