Skip to content

Latest commit

 

History

History
89 lines (61 loc) · 1.29 KB

File metadata and controls

89 lines (61 loc) · 1.29 KB

typelab / conditions / IfObjectArrayLike

type IfObjectArrayLike<T, Then, Else> = IfObjectLiteral<T, T extends T ? Exclude<keyof T extends infer U ? U extends number ? U : U extends `${infer V extends number}` ? V : U extends "length" ? T[U] extends number ? never : U : U : never, number> extends never ? Then : Else : never, Else>;

Resolves to Then if the type T is array-like object, otherwise resolves to Else.

Type Parameters

Type Parameter Default type Description

T

The type to be checked.

Then

The type to return if T is array-like object.

Else

never

The type to return if T is not array-like object. Defaults to never.

Returns

Then if T is array-like object, Else otherwise.

Example

// 'yes'
type Yes = IfObjectArrayLike<{ 0: number; 1: number; }, 'yes', 'no'>;

// 'no'
type No = IfObjectArrayLike<{ 0: number; id: number; }, 'yes', 'no'>;

// 'yes' | 'no'
type YesOrNo = IfObjectArrayLike<{ 0: number; 1: number; } | { 0: number; id: number; }, 'yes', 'no'>;