Uel*_*mer 7 types typescript angular
我有一个HTTP API.我正在加载一组对象作为json.
我想要转换为Typescript对象,但是使用关键字"as"它不起作用,甚至不能在对象前面使用<Type>.
r.forEach(entry => {
entry.creationDate = new Date(entry.creationDate.date);
entry.creator = <User>entry.creator;
return entry;
});
Run Code Online (Sandbox Code Playgroud)
在entry.creator转换后直接输出console.log输出一个普通的"对象".
有人可以给我一个建议吗?
小智 20
我一直在努力解决类似的问题,在我看来这是打字稿中的缺陷.当你像你一样做演员表时.或者像这样的示例代码:
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();
Run Code Online (Sandbox Code Playgroud)
您会注意到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();
Run Code Online (Sandbox Code Playgroud)
正如您所看到的那样,它不会使用您在进行强制转换时由类准备的原型函数.我的另一种选择是做这样的事情:
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();
Run Code Online (Sandbox Code Playgroud)
这可以确保您使用原型函数,正如生成的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();
Run Code Online (Sandbox Code Playgroud)
所以基本上我所说的是我同意你的意思,它应该像你一样工作,但是转换器不使用原型函数,所以它不起作用.
我希望这可以帮助你.
| 归档时间: |
|
| 查看次数: |
5801 次 |
| 最近记录: |