Какой тип утилиты требует в TypeScript указывать тип на основе другого вложенного типа?

#typescript

#typescript

Вопрос:

Как извлечь тип { alpha: number; bravo: string; } из type Test ?

 type Test = {
  foo: {
    alpha: number;
    bravo: string;
  }
}

//             ↓ Utility type which I want to know
type SubTest = UtilityType<Test, "foo">;

// Must be same as:
type SubTest = {
  alpha: number;
  bravo: string;
}
  

Пожалуйста, обратите внимание, что в этом вопросе SubTest должно быть указано Test , но не наоборот.

Ответ №1:

На самом деле это не тип утилиты, вам нужно получить доступ к значению ключа свойства ‘foo’, что вы делаете, используя обозначения в квадратных скобках. Это называется типом поиска.

 type Subtype = Type['foo']
  

Ссылка на игровую площадку

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

1. Известен как тип поиска или тип «индексированного доступа».

2. @jcalz Спасибо! Я пропустил слово «тип поиска» и не смог найти нужную мне страницу документов, когда искал «квадратные скобки typescript». Так что, справедливости ради, задавая здесь вопрос, может быть очень сложно найти информацию, не зная правильной терминологии.

3. Да, документы довольно разбросаны и, как правило, не очень хорошо справляются с темпами внедрения новых языковых функций. Я имею в виду, кроме примечаний к выпуску, что является одной из причин, по которой трудно что-то найти.

4. И да, я преждевременно сопоставил шаблон с «какой тип утилиты требуется» и подумал «вопрос о домашнем задании» вместо того, чтобы на самом деле посмотреть и увидеть, что им вообще не нужен встроенный тип утилиты. Ну и ладно!