簡體   English   中英

打字稿對象轉換不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM