我有一个带有可为空字段的接口(interface)IFilterSet:
export interface IFilterSet {
filter1?: boolean;
filter2?: boolean;
filter3?: number;
fitler4?: string;
}
我收到另一个对象 X,该对象可能包含 IFilterSet 对象等。
我想映射对象 X 的 IFilterSet 属性。 第一个问题是为这些属性创建一个循环,但因为它们可以为空,所以它不会工作,不会有任何东西可以循环。 初始化一个空的 IFilterSet 会破坏这些属性可为空的目的,对吗?
最佳答案
我不确定我是否完全明白你的问题,但是这样怎么样:
function map(filterSet: IFilterSet, obj: X) {
(obj as any)['filter1'] = filterSet.filter1;
(obj as any)['filter2'] = filterSet.filter2;
(obj as any)['filter3'] = filterSet.filter3;
(obj as any)['filter4'] = filterSet.filter4;
}
这样,X 实例将获取 filterSet
的所有属性,并因不存在的属性而获取 undefined
,但所有字段最终都会在那里。
或者这个(如果您尝试构造一个新的 IFilterSet
实例):
function map(obj: X): IFilterSet {
return {
filter1: (obj as any)['filter1'],
filter2: (obj as any)['filter2'],
filter3: (obj as any)['filter3'],
filter4: (obj as any)['filter4']
}
}
在这里,您将获得一个 IFilterSet
实例,其字段为 undefined
或 filter1
到 filter4
。
无论哪种方式,您都必须对字段名称进行硬编码,我不确定您是否可以以不同的方式获得它。
关于javascript - 具有可为空属性的 Typescript 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48377836/