declare function unboxPrimitive<T extends unboxPrimitive.Boxed>(value: T): unboxPrimitive.Unbox<T>;

declare namespace unboxPrimitive {
    type Boxed = String | Number | Boolean | Symbol | BigInt;
    type Unbox<T extends Boxed> = T extends String ? string
        : T extends Number ? number
        : T extends Boolean ? boolean
        : T extends Symbol ? symbol
        : T extends BigInt ? bigint
        : never;
}

export = unboxPrimitive;