我得到一個json響應並將其存儲在mongodb中,但是我不需要的字段也正在進入數據庫,是否有去除uneseccary字段?從打字稿界面對象中刪除字段
interface Test{
name:string
};
const temp :Test = JSON.parse('{ "name":"someName","age":20 }') as Test;
console.log(temp);
輸出:
{ name: 'someName', age: 20 }
我得到一個json響應並將其存儲在mongodb中,但是我不需要的字段也正在進入數據庫,是否有去除uneseccary字段?從打字稿界面對象中刪除字段
interface Test{
name:string
};
const temp :Test = JSON.parse('{ "name":"someName","age":20 }') as Test;
console.log(temp);
輸出:
{ name: 'someName', age: 20 }
您可以使用主從給定的對象某些屬性的功能:
function pick<T, K extends keyof T>(obj: T, ...keys: K[]): Pick<T, K> {
const copy = {} as Pick<T, K>;
keys.forEach(key => copy[key] = obj[key]);
return copy;
}
然後:
let obj = { "name": "someName", "age": 20 };
let copy = pick(obj, "name") as Test;
console.log(copy); // { name: "someName" }
我已經找到了一個npm包ts-transformer-keys我們可以指定鍵自動與您的功能 – Bekzod
你看過[源](https://github.com/kimamula/ts-transformer-keys/blob/master/transformer.ts)?它實際上在運行時用ts編譯器api打開ts文件以獲取對象中的鍵。這聽起來像是一個極端的矯枉過正,我不會使用它 –
假設你要刪除的年齡
temp = {...temp, age: undefined}
這將從對象中刪除好age
。
如果有很多我不希望它在那裏的領域,該怎麼辦? – Bekzod
瞭解,我必須手動選擇所需的字段,我有大約30個字段,我需要大約10個 – Bekzod
是的,如果您有幾個要刪除的鍵,則速度會很快。選擇的答案很好,不要使用'delete'!它很慢! – borislemke
接口不會影響運行時行爲,因爲接口在運行時不存在。你將不得不使用delete
刪除從對象的屬性:
let obj = JSON.parse('{ "name":"someName","age":20 }')
delete obj.age;
不要使用'delete',它太痛苦了 – borislemke
@borislemke慢多少? JavaScript比Assembly更慢。它阻止你使用它嗎?我不認爲這種納米優化是值得的。 – Saravana
我希望你是對的,但你不是。這是非常非常慢:https://jsperf.com/delete-vs-undefined-vs-null/16 – borislemke
我相信你需要創建一個沒有不需要的屬性的新對象,並將當前對象轉換爲該對象。如果從同一接口繼承兩個接口,則會更好。 – SayusiAndo