给出以下具有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);
我得到的只是一个空对象文字{}
。
答案 0 :(得分:3)
接口仅存在于类型系统中,并且TypeScript类型永远不会影响所发出的JavaScript。
因此,仅基于接口是完全不可能的。
但是,您可以将接口替换为类。
答案 1 :(得分:1)
您可以创建一个工厂类,该工厂类将返回EmployeeFilter
类型的对象。您还可以将EmployeeFilter
界面中的所有字段标记为可选,例如name?: string;
等。然后,每当需要一些EmployeeFilter时,工厂都可以使用默认值将其返回。您不能创建接口实例或以某种方式将其强制转换为类,因为接口在运行时中不存在。它们仅在编译期间用于类型检查。