Created
August 12, 2017 06:11
-
-
Save splitline/831235e4f2f10e64df000f0bae7216ae to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// UserData轉換測試 | |
const data = '{"UserID" : "1", "UserName" : "dev", "Account" : {"Value" : 210504751746}}'; | |
console.log(JSON.parse(data) as UserData); // 數值成功轉換,但data.Account不具有任何Account Class的特性 | |
const d = new UserData(); | |
Object.assign(d, JSON.parse(data)); // 數值成功轉換,但data.Account不具有任何Account Class的特性 | |
console.log(d); | |
// Account轉換測試 | |
const acc = '{"Value" : 210504751746}'; | |
const a = new Account(); | |
console.log(JSON.parse(acc) as Account); // 數值成功轉換,但無法執行Account Class下的任何函式 | |
Object.assign(a, JSON.parse(acc)); // 可以成功執行Account Class下的函式 | |
console.log(a); | |
// 簡單來說,用 as (或是泛型),沒辦法讓數值以外的東西(函式之類的)成功轉換 | |
// 註:泛型Compile成Js之後只會長成下面這樣-> | |
// 原始ts: | |
// let data = {aaa: 1, bbb: "ABCDE"}; | |
// let result = data as UserData; | |
// 編譯後的JS: | |
// let result = data; | |
// 它只是Compile時檢查確認後,就讓他直接相等,所以不能完整轉換理所當然(? | |
// 用 Object.assign 則是只會轉換一層,沒辦法deep assign | |
// 例如上面的UserData,雖然第一層的內容都成功轉換了,但是第二層的Account不會被轉換到 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment