[Обновление: эти типы были перемещены в объектный модуль Utility Types]

Распространенным вариантом использования является условный тип, который воздействует на значение определенного свойства. Пакет Utility-Types предоставляет несколько полезных типов для создания интерфейсов с определенными формами.

Обзор

Модуль Prop Utility-Types очень мал. Это полезные универсальные типы как для вывода, так и для определения свойств.

Оглавление

Типы реквизита

InferProperty

Определите тип свойства A[B].

/**
 * Infer the type of property `A[B]`.
 * @example
 * ```
 * type Ex = InferProperty<{ test: 'blah' }, 'test'> // 'blah'
 * ```
 */
export type InferProperty<A extends AnyObject, B extends keyof A> = A extends {
  [C in B]: infer D
}
  ? D
  : never

ДлинаПроп

Определите тип свойства «длина».

/**
 * Return the length of tuple `A`
 * @example
 * ```
 * type Ex1 = LengthProp<[1, 2, 3]> // 3
 * type Ex2 = LengthProp<'Hello'> // 5
 * ```
 */
export type LengthProp<A extends WithLengthProp> = A extends string
 ? InferProperty<Split<A>, 'length'>
 : InferProperty<A, 'length'>

Витленгспроп

Общий интерфейс для любого типа со свойством длины.

/**
 * An object A that has a `length` property
 * @example
 * ```
 * type Ex = WithLengthProp<number> // { length: number }
 * ```
 */
export type WithLengthProp<A = any> = AnyObject<'length', A>

Заключение

Типы prop предоставляют несколько полезных инструментов для работы с объектами.

Не забудьте подписаться! Эта статья является частью продолжающейся серии о пакете Utility-Types.

Гитхаб-репозиторий

Активная серия