import type {IsNever} from './is-never.d.ts'; /** Returns a boolean for whether the given type is a union. @example ``` import type {IsUnion} from 'type-fest'; type A = IsUnion; //=> true type B = IsUnion; //=> false ``` */ export type IsUnion = InternalIsUnion; /** The actual implementation of `IsUnion`. */ type InternalIsUnion = ( IsNever extends true ? false : T extends any ? [U] extends [T] ? false : true : never ) extends infer Result // In some cases `Result` will return `false | true` which is `boolean`, // that means `T` has at least two types and it's a union type, // so we will return `true` instead of `boolean`. ? boolean extends Result ? true : Result : never; // Should never happen export {};