微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

angular – Typescript对象转换不起作用

我有一个HTTP API.
我正在加载一组对象作为json.

我想要转换为Typescript对象,但是使用关键字“as”它不起作用,甚至不能使用<输入>在对象面前.

r.forEach(entry => {
    entry.creationDate = new Date(entry.creationDate.date);
    entry.creator = <User>entry.creator;
    return entry;
});

在entry.creator转换后直接输出console.log输出一个普通的“对象”.

有人可以给我一个建议吗?

解决方法

我一直在努力解决类似的问题,在我看来这是打字稿中的缺陷.当你像你一样做演员表时.或者像这样的示例代码

class User {
    name: string;

    doConsole(): void {
        console.log(`Name: ${this.name}`);
    }
}

let userObj = { name: 'jose' };

let user = new User();
Object.assign(user,userObj);

user.doConsole();

您会注意到doConsole将不是已转换对象中的函数.这就是生成的JS:

var User = (function () {
    function User(name) {
        this.name = name;
    }
    User.prototype.doConsole = function () {
        console.log("Name: " + this.name);
    };
    return User;
}());
var userObj = { name: 'jose' };
var user = userObj;
user.doConsole();

正如您所看到的那样,它不会使用您在进行强制转换时由类准备的原型函数.
我的另一种选择是做这样的事情:

class User {
    name: string;

    doConsole(): void {
       console.log(`Name: ${this.name}`);
    }
}

let userObj = { name: 'jose' };

let user = new User();
Object.assign(user,userObj);

user.doConsole();

这可以确保您使用原型函数,正如生成的JS所示:

var User = (function () {
    function User() {
    }
    User.prototype.doConsole = function () {
        console.log("Name: " + this.name);
    };
    return User;
}());
var userObj = { name: 'jose' };
var user = new User();
Object.assign(user,userObj);
user.doConsole();

所以基本上我所说的是我同意你的意思,它应该像你一样工作,但是转换器不使用原型函数,所以它不起作用.

我希望这可以帮助你.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐