Skip to content

Latest commit

 

History

History
30 lines (23 loc) · 951 Bytes

README.md

File metadata and controls

30 lines (23 loc) · 951 Bytes

PredicateFunction matches type constraint for type guard, meaning first argument is used in return type and return type is type predicate

const createPredicate = createFactoryWithConstraint<PredicateFunction>();

const isBoolean = createPredicate((value: unknown): value is boolean => typeof value === "boolean");
//    ^? (value: unknown) => value is boolean

It's handy to use it with PredicateType to chain guards to narrow broader types

const isEachElementOf = <Type extends PredicateFunction>(
  thing: unknown,
  elementPredicate: Type,
): thing is Array<PredicateType<Type>> => {
  return Array.isArray(thing) && thing.every(elementPredicate);
};

const array = [true, false, true] as unknown[];
//    ^? unknown[]

if (isEachElementOf(array, isBoolean)) {
  array;
  // ^? boolean[]
}

TS Playground – https://tsplay.dev/mAJX1W