Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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
如何将json映射到angular7中的接口?_Angular_Typescript - Fatal编程技术网

如何将json映射到angular7中的接口?

如何将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

我正在使用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'
};

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。我想知道如何管理坏数据在我的示例中,电话号码的类型不可分配给接口。我想知道如何管理坏数据