打字稿对象转换不起作用

时间:2016-10-15 18:55:45

标签: angular typescript types

我有一个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输出一个普通的&#34;对象&#34;。

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

2 个答案:

答案 0 :(得分:17)

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

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();

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

我希望这会对你有所帮助。

答案 1 :(得分:2)

Javascript本身不支持强类型。您只能在Typescript中使用强类型,但它仅适用于编译时。您在运行时遇到的是预期的行为。您的代码不是错误或错误。

  

Typescript提供的一些强大功能包括:

     
      
  • 编译时间检查:在您的代码之前查找代码上的潜在错误   客户呢。
  •   
  • 强类型对象:通过指定类型   您的功能所期望的对象可以降低意外风险   结果。
  •   

我的报价来源以及有关强类型here的更多信息。