![](/img/trans.png)
[英]Angular: Typescript casting JSON response as object model not working
[英]Typescript object casting not working
我有一個HTTP API。 我正在加載一組對象作為json。
我想要轉換為Typescript對象,但是使用關鍵字“as”它不起作用,甚至不能在對象前面使用<Type>。
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();
所以基本上我所說的是我同意你的意思,它應該像你一樣工作,但是轉換器不使用原型函數,所以它不起作用。
我希望這可以幫助你。
Javascript本身不支持強類型。 您只能在Typescript中使用強類型,但它僅適用於編譯時。 您在運行時遇到的是預期的行為。 您的代碼不是錯誤或錯誤。
Typescript提供的一些強大功能包括:
- 編譯時間檢查:在客戶執行之前查找代碼上的潛在錯誤。
- 強類型對象:通過指定函數所期望的對象類型,可以降低意外結果的風險。
我的報價淵源及強類型的詳細信息在這里 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.