feat: improve type safety of functions

old-agentic-v1^2
Philipp Burckhardt 2023-06-16 11:22:21 -04:00
rodzic c6b3f3d339
commit b865b58242
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: A2C3BCA4F31D1DDD
1 zmienionych plików z 37 dodań i 8 usunięć

Wyświetl plik

@ -138,18 +138,47 @@ export function stringifyForModel(json: types.Jsonifiable): string {
}
}
export function pick<T extends object, U = T>(obj: T, ...keys: string[]): U {
return Object.fromEntries(
keys.filter((key) => key in obj).map((key) => [key, obj[key]])
) as U
/**
* Picks keys from an object.
*
* @param obj - object to pick keys from
* @param keys - keys to pick from the object
* @returns new object with only the picked keys
*/
export function pick<T extends object, K extends keyof T>(
obj: T,
...keys: K[]
) {
return keys.reduce((result, key) => {
result[key] = obj[key]
return result
}, {} as Pick<T, K>)
}
export function omit<T extends object, U = T>(obj: T, ...keys: string[]): U {
return Object.fromEntries<T>(
Object.entries(obj).filter(([key]) => !keys.includes(key))
) as U
/**
* Omits keys from an object.
*
* @param obj - object to omit keys from
* @param keys - keys to omit from the object
* @returns new object without the omitted keys
*/
export function omit<T extends object, K extends keyof T>(
obj: T,
...keys: K[]
) {
const keySet = new Set(keys)
return Object.keys(obj).reduce((result, key) => {
if (!keySet.has(key as K)) {
result[key] = obj[key as keyof T]
}
return result
}, {} as Omit<T, K>)
}
/**
* Function that does nothing.
*/
const noop = () => undefined
/**