import type { Constructor, Primitive } from './types'
export function isDefined(value: A | undefined): value is A {
return value !== undefined
}
export function isUndefined(value: A | undefined): value is undefined {
return value === undefined
}
export function isNonNull(value: A | null): value is A {
return value !== null
}
export function isNull(value: A | null): value is null {
return value === null
}
export function isNonNullable(value: A | null | undefined): value is A {
return value != null
}
export function isNullable(value: A | null | undefined): value is null | undefined {
return value == null
}
export function isIterable(value: any): value is Iterable {
return Symbol.iterator in value
}
export function isArray(value: A | Array | ReadonlyArray): value is Array
export function isArray(value: any): value is Array
export function isArray(value: any): boolean {
return Array.isArray(value)
}
export function isObject(value: A): false
export function isObject(value: unknown): value is object
export function isObject(value: A | Primitive): value is A
export function isObject(value: A | Primitive): boolean {
return typeof value === 'object' && value !== null
}
export function isFunction(value: any): value is Function {
return typeof value === 'function'
}
export function isBoolean(value: any): value is boolean {
return typeof value === 'boolean'
}
export function isString(value: any): value is string {
return typeof value === 'string'
}
export function isNumber(value: any): value is number {
return typeof value === 'number'
}
export function isSymbol(value: any): value is symbol {
return typeof value === 'symbol'
}
export function isPlain(value: any): value is object {
return isObject(value) && value.constructor === Object
}
export function isInstanceOf, A>(type: C): (value: any) => value is A {
return (value): value is A => value instanceof type
}