Всем привет, есть функция которая принимает какой либо объект и его ключ и дальше совершаются манипуляции которые должны происходить только если свойство является необходимым типом, в моем случае строкой так как я делаю поиск, на саму механику поиска можно не обращать внимания, суть в том что при вызове функции нужно ограничить ключ по выходному типу свойства объекта, вот код:
type SomeObject<T = any> = { [key: string | number | symbol]: T }
function sortBySearch<T extends SomeObject, K extends keyof T >(
search: string,
list: T[],
key: K,
): T[] {
return list.filter((item) => {
const parts = item[key].split(" ");
return parts.some((part) => {
const query = search.trim().toLowerCase();
const lower = part.toLowerCase();
const startWith = lower.startsWith(query);
const includes = lower.includes(query);
return startWith || includes;
});
});
}
const list = [
{ name: "Some name 1", order: 1 },
{ name: "Some name 2", order: 2 }
]
// Тут должно быть ограничение на ввод только ключа "name"
const foundList = sortBySearch("name", list, "name");
PS: тип SomeObject это первая реализация, но там мы строго ограничиваем сам объект по всем данным, по началу мне это подходило, но потом я добавил свойство с типом number и такой вариант уже стал не особо гибким