如何处理特别的“长”接口?

时间:2019-05-21 14:07:04

标签: angular typescript

给出以下具有10个或更多属性的界面

export interface EmployeeFilter {
  name: string;
  gender: string;
  age: number;
  from: Date;
  to: Date;
  module: string;
  position: string;
  phone: string;
  email: string;
  country: string;
}

是否可以使用EmployeeFilter签名初始化对象而无需显式设置属性?

  

此刻,我必须手动初始化属性:

const searchby: EmployeeFilter = {
  name: '',
  gender: '',
  age: 28,
  from: null,
  to: null,
  module: '',
  position: '',
  phone: '',
  email: '',
  country: ''
}

因此,我正在寻找一种通过将其设置为EmployeeFilter来自动初始化所​​有null属性的方法。 我尝试过一些想法,例如:

const searchby: EmployeeFilter = new class implements EmployeeFilter{}();

但是,例如,通过做console.log(searchby);我得到的只是一个空对象文字{}

2 个答案:

答案 0 :(得分:3)

接口仅存在于类型系统中,并且TypeScript类型永远不会影响所发出的JavaScript。

因此,仅基于接口是完全不可能的。

但是,您可以将接口替换为类。

答案 1 :(得分:1)

您可以创建一个工厂类,该工厂类将返回EmployeeFilter类型的对象。您还可以将EmployeeFilter界面中的所有字段标记为可选,例如name?: string;等。然后,每当需要一些EmployeeFilter时,工厂都可以使用默认值将其返回。您不能创建接口实例或以某种方式将其强制转换为类,因为接口在运行时中不存在。它们仅在编译期间用于类型检查。