Skip to content

Instantly share code, notes, and snippets.

@ReVoid
Last active November 27, 2023 11:40
Show Gist options
  • Save ReVoid/78f1b14e65f8391e6f091abf570bbc0a to your computer and use it in GitHub Desktop.
Save ReVoid/78f1b14e65f8391e6f091abf570bbc0a to your computer and use it in GitHub Desktop.
Strongly typed sort order
// Example entity
export interface IPerson {
firstName: string,
lastName: string,
age: number,
}
type SortOrder = 'asc' | 'desc'; // ascending or descending
type OrderByKeys<T> = `${keyof T & string}:${SortOrder}`[]
type OrderByObject<T> = Partial<Record<keyof T, SortOrder>>;
type OrderBy<T> = OrderByKeys<T> | OrderByObject<T>;
const sortByKeys: OrderBy<IPerson> = ['firstName:asc', 'age:desc']; // ✅
const sortByObject: OrderBy<IPerson> = {
firstName: 'asc', // ✅
age: 'desc', // ✅
// whatever:asc // ❌
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment