gpt4 book ai didi

typescript - 从未在类型接口(interface)中声明的对象中删除属性

转载 作者:行者123 更新时间:2023-12-03 09:34:17 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





TypeScript - extract interface members only - possible?

(6 个回答)


3年前关闭。




我想从未在特定类型接口(interface)中声明的对象中删除所有属性。

例如,假设我有以下界面:

export interface CreateCustomerUserInput {
fullname: string;
email: string;
}

我有以下对象:
let obj = {fullname: 'AAA', email: 'aa@aa.com', phone: '111', address: 'XXX'};

但我想创建一个只包含在类型接口(interface)中声明的属性的新对象。
这是预期的对象:
let c = {fullname: 'AAA', email: 'aa@aa.com'}

在 TypeScript 中有什么好的方法可以解决这个问题吗?

最佳答案

如果我对您的理解正确,您希望从未在特定类型接口(interface)中定义的对象中剥离所有属性。

不幸的是,类型接口(interface)在运行时不可用——也就是说,它们在运行 JavaScript 代码时不存在。因此,无法以编程方式访问有关类型的反射信息。

但是,使用 class 可能会成功。 .例如,假设您有以下类:

export class CreateCustomerUserInput {
public fullname: string = "";
public email: string = "";
}

您可以创建该类的实例并使用 for.. in 迭代其属性。循环或使用 Object.keys() .然后,您可以使用 delete 去除给定对象的属性。对于您的类实例中不可用的每个属性。

为此,请确保 全部 类的属性在构造后初始化。

另一种方法是使用带有实验性元数据标志的 TypeScript 装饰器,如下所述: http://www.typescriptlang.org/docs/handbook/decorators.html .

它们保留反射信息,但仅适用于类(或抽象类)!

关于typescript - 从未在类型接口(interface)中声明的对象中删除属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51155239/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com