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 对象转换为类

将数组转换为 Json [重复]

PHP将带有一些(重复)元素的XML转换为Json到Json数组[重复]

Typescript接口,强制执行额外属性的类型[重复]

从 JSON 实例化对象数组 [重复]

将数组转换为 JSON [重复]