get<K, V>(collection: Collection<K, V>, key: K): V | undefined
get<K, V, NSV>(collection: Collection<K, V>, key: K, notSetValue: NSV): V | NSV
get<TProps, K>(record: Record<TProps>, key: K, notSetValue: unknown): TProps,[K]
get<V>(collection: Array<V>, key: number): V | undefined
get<V, NSV>(collection: Array<V>, key: number, notSetValue: NSV): V | NSV
get<C, K>(object: C, key: K, notSetValue: unknown): C,[K]
get<V>(collection: {[key: string]: V}, key: string): V | undefined
get<V, NSV>(collection: {[key: string]: V},
key: string,
notSetValue: NSV): V | NSV