我想从未在特定类型接口中声明的对象中删除所有属性。
例如,假设我有以下界面:
export interface CreateCustomerUserInput {
fullname: string;
email: string;
}
Run Code Online (Sandbox Code Playgroud)
我有以下对象:
let obj = {fullname: 'AAA', email: 'aa@aa.com', phone: '111', address: 'XXX'};
Run Code Online (Sandbox Code Playgroud)
但我想创建一个仅在类型接口中声明属性的新对象。这是预期的对象:
let c = {fullname: 'AAA', email: 'aa@aa.com'}
Run Code Online (Sandbox Code Playgroud)
在 TypeScript 中有什么好的方法可以解决这个问题吗?
如果我理解正确的话,您想从对象中删除未在特定类型接口中定义的所有属性。
不幸的是,类型接口在运行时不可用 - 这意味着它们在运行 JavaScript 代码时不存在。因此,无法以编程方式访问有关类型的反射信息。
但是,您可能会通过使用class. 例如,假设您有以下课程:
export class CreateCustomerUserInput {
public fullname: string = "";
public email: string = "";
}
Run Code Online (Sandbox Code Playgroud)
您可以创建该类的实例,并使用for.. in循环或 with迭代其属性Object.keys()。delete然后,您可以通过使用类实例中不可用的每个属性来去除给定对象的属性。
为此,请确保类的所有属性在构造后都已初始化。
另一种方法是使用带有实验性元数据标志的 TypeScript 装饰器,如下所述: http: //www.typescriptlang.org/docs/handbook/decorators.html。
它们保留反射信息,但仅限于类(或抽象类)!
| 归档时间: |
|
| 查看次数: |
10370 次 |
| 最近记录: |