Тип, основанный на подмножестве другого типа, ключи которого начинаются с определенной строки

#typescript

Вопрос:

Я пытаюсь создать тип из другого типа. Этот тип будет содержать подмножество ключей на основе их префикса.

Пример базового типа:

 interface Foo {
  axisControl: FormControl;
  directionControl: FormControl;

  filteredAxis: Observable<string[]>;
  filteredDirection: Observable<string[]>;
}

type Bar = // I want to write something only based on the prefix "filtered"
 

Ожидаемый результат:

 {
  filteredAxis: Observable<string[]>;
  filteredDirection: Observable<string[]>;
}
 

Возможно ли это и как?

То, что я пробовал до сих пор:

 Pick<Foo, `filtered${string}`>
 

Но это приводит к ошибке.

Ответ №1:

Вам нужно сузить выбранный тип с пересечением:

 type FooWithFiltered = Pick<Foo, `filtered${string}` amp; keyof Foo>
 

Игровая площадка

Комментарии:

1. Спасибо, ваш ответ-это реальный ответ на мой вопрос. Вот мой фактический полный вариант использования , знаете ли вы, почему variable он не имеет типа string[] , когда я его навожу? Я знаю, что это может быть еще один вопрос, но я задаю его здесь на случай, если у вас есть немедленный ответ.

2. Возможно, вам придется создать другой тип, который сначала явно сузит его. это работает с этим