【问题标题】:Remove properties from an object that are not declared in a type interface [duplicate]从未在类型接口中声明的对象中删除属性[重复]
【发布时间】:2018-07-04 00:43:08
【问题描述】:

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

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

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

我有以下对象:

let obj = {fullname: 'AAA', email: 'aa@aa.com', phone: '111', address: 'XXX'};

但我想创建一个只包含在类型接口中声明的属性的新对象。 这是预期的对象:

let c = {fullname: 'AAA', email: 'aa@aa.com'}

TypeScript 有什么好办法解决这个问题吗?

【问题讨论】:

    标签: typescript


    【解决方案1】:

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

    不幸的是,类型接口在运行时不可用——也就是说,它们在运行 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

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

    【讨论】:

      猜你喜欢
      • 2021-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多