Задать вопрос
@awenn2015
Веб-программист самоучка

Как ограничить вводимые ключи объекта в функцию по нужному типу T[keyof T]?

Всем привет, есть функция которая принимает какой либо объект и его ключ и дальше совершаются манипуляции которые должны происходить только если свойство является необходимым типом, в моем случае строкой так как я делаю поиск, на саму механику поиска можно не обращать внимания, суть в том что при вызове функции нужно ограничить ключ по выходному типу свойства объекта, вот код:

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 и такой вариант уже стал не особо гибким
  • Вопрос задан
  • 126 просмотров
Подписаться 1 Средний 8 комментариев
Решения вопроса 1
@awenn2015 Автор вопроса
Веб-программист самоучка
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы