我得到一个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