23 lines
660 B
TypeScript
23 lines
660 B
TypeScript
import { isKey } from './_isKey'
|
|
import { castPath } from './_castPath'
|
|
import { toKey } from './_toKey'
|
|
|
|
import type { PropertyPath } from './_common'
|
|
|
|
function baseGet(object: any, path: PropertyPath) {
|
|
path = isKey(path, object) ? [path] : castPath(path)
|
|
|
|
let index = 0
|
|
const length = path.length
|
|
|
|
while (object != null && index < length) {
|
|
object = object[toKey(path[index++])]
|
|
}
|
|
return index && index == length ? object : undefined
|
|
}
|
|
|
|
export function get(object: any, path: PropertyPath, defaultValue?: any): any {
|
|
const result = object == null ? undefined : baseGet(object, path)
|
|
return result === undefined ? defaultValue : result
|
|
}
|