Last active
November 27, 2023 11:40
-
-
Save ReVoid/78f1b14e65f8391e6f091abf570bbc0a to your computer and use it in GitHub Desktop.
Strongly typed sort order
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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