TypeScript强制转换json数组[重复]
Posted
技术标签:
【中文标题】TypeScript强制转换json数组[重复]【英文标题】:TypeScript casting json array [duplicate] 【发布时间】:2017-06-16 17:20:38 【问题描述】:我有如下 JSON 数组:
var json = [
id: 1,
login: "Mieszko",
name: "Misztal",
surname: "Adminek",
phone: "0413414",
role: 2
,
id: 2,
login: "Rafal",
name: "Robak",
surname: "Kierowczek",
phone: "5145145",
role: 1
];
我还创建了如下的用户类:
export class User extends BaseModel
id: number;
login: string;
name: string;
surname: string;
phone: string;
roles: Roles;
admin: boolean;
driver: boolean;
isDriver(): boolean
return this.roles === 1;
//other methods
我的计划是将传入的 JSON 数组转换为用户数组。在 JSON 中,我将角色作为整数。我的班级中有管理员和驱动程序布尔字段。这在 ngModel 中需要用于复选框。
现在问题出在这一行之后
var users: Array<User> = JSON.parse(JSON.stringify(json));
我无法从 User 类调用方法,例如 users[0].isDriver()
,因为编译器无法识别 isDriver() 方法。
有人知道怎么解决吗?
【问题讨论】:
那个数组怎么是 JSON 数组???它可以是一个数组,也可以是 JSON 格式的数据。对我来说,这看起来很像一个数组,不管你把保存它的变量叫做什么...... 这不是重复的。编辑们再次急于获得新的 SO 徽章,而不是对问题进行属性确认。链接中作为唯一问题提出的问题没有答案。 【参考方案1】:TypeScript 类型断言
TypeScript 允许您以任何您想要的方式覆盖其推断和分析的类型视图。这是通过一种称为“类型断言”的机制完成的。
类型断言有两种形式。一种是“尖括号”语法:
let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;
另一个是as-syntax:
let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;
回答这个问题
在您的情况下,问题不在于类型断言。您正在尝试将纯 JSON 对象数组分配给 users 变量,然后尝试调用对象上不存在的方法(users[0].isDriver 未定义)。
您不能简单地将普通对象转换为 javascript/TypeScript 类实例。您必须先实例化一个用户。有许多技术可以做到这一点,通常涉及复制数据。
有关将 JSON“转换”为 TS 类实例的示例解决方案,请参阅以下答案之一:
-
https://***.com/a/22886730/6103920
https://***.com/a/29759472/6103920
【讨论】:
以上是关于TypeScript强制转换json数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Angular 5 / Typescript - 如何将复杂的 json 对象转换为类