[Обновление: эти типы были перемещены в объектный модуль 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.