我有一个指令,在 Input 中可以获取字符串数组或对象数组。该指令是从 中过滤列表@Input()并发出一个新列表@Output()。在指令中,我创建了一个可以完成所有魔法的方法,但我无法正确键入@Input()和函数本身。
export class SelectFilteringDirective<T> {
@Input() readonly optionsList: T[] = [];
@Output() filteredList = new EventEmitter<T[]>();
constructor() {}
@HostListener('keyup', ['$event'])
onKeyup(event: Event): void {
this.filteredList.emit(
this.filterList(
this.optionsList,
(event.target as HTMLInputElement).value
)
);
}
private filterList(data: T[], value: string): any {
return typeof data[0] === 'object'
? [...data].filter(
(item) => item.value.toLowerCase().indexOf(value.toLowerCase()) != -1
)
: [...data].filter(
(item) => item.toLowerCase().indexOf(value.toLowerCase()) != -1
);
}
}
在带有对象的变体中,我收到错误:
Property 'value' does not exist on type 'T'.
但是,在带有字符串数组的变体中,出现错误:
Property 'toLowerCase' does not exist on type 'T'.