我有一个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;。
有人可以给我一个建议吗?
答案 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的更多信息。