export function isMap(x: any): x is Map { if (!x) { return false } const map = x as Map return ( isFunction(map.set) && isFunction(map.get) && isFunction(map.has) && isFunction(map.delete) && isFunction(map.clear) && isFunction(map[Symbol.iterator]) ) } export function isSet(x: any): x is Set { if (!x) { return false } const set = x as Set return ( isFunction(set.add) && isFunction(set.clear) && isFunction(set.delete) && isFunction(set.has) && isFunction(set[Symbol.iterator]) ) } export function isFunction(x: any): x is Function { return typeof x === 'function' }