type-plus
Version:
Provides additional types for TypeScript.
21 lines (19 loc) • 628 B
text/typescript
import type { UnionKeys } from '../union_keys.js'
export function getField<T, TX extends Exclude<T, undefined | null>, K extends UnionKeys<TX>>(
subject: T,
key: K
): TX[K]
export function getField<
T,
TX extends Exclude<T, undefined | null>,
K extends UnionKeys<TX>,
DV extends Exclude<TX[K], undefined>
>(subject: T, key: K, defaultValue: DV): DV
export function getField<
T,
TX extends Exclude<T, undefined | null>,
K extends UnionKeys<TX>,
DV extends Exclude<TX[K], undefined>
>(subject: T, key: K, defaultValue?: DV) {
return (subject && (subject as unknown as { [k in K]: TX[K] | DV })[key]) || defaultValue
}