Skip to content

Instantly share code, notes, and snippets.

@MikelArnaiz
Created September 16, 2020 08:08
Show Gist options
  • Save MikelArnaiz/4a46902889f00982358022bd2fa2020a to your computer and use it in GitHub Desktop.
Save MikelArnaiz/4a46902889f00982358022bd2fa2020a to your computer and use it in GitHub Desktop.
Sort compare function with key accessor
type FilteredKeys<T, U> = { [P in keyof T]: T[P] extends U ? P : never }[keyof T]
const compare = <T>(fn: (x: T, y: T) => number) => <O extends object>(key: FilteredKeys<O, T>) => (
a: O,
b: O,
): number => {
const valA = (a[key] as unknown) as T
const valB = (b[key] as unknown) as T
return fn(valA, valB)
}
export const compareStrings = compare<string>((a, b) => a.localeCompare(b))
export const compareDates = compare<Date>((a, b) => a.valueOf() - b.valueOf() )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment