// @target: esnext

// Narrow a union of primitive types
let var1: string | number | boolean | any[] | symbol | bigint;
if (var1.constructor === String) {
    var1; // string
}
if (var1.constructor === Number) {
    var1; // number
}
if (var1.constructor === Boolean) {
    var1; // boolean
}
if (var1.constructor === Array) {
    var1; // any[]
}
if (var1.constructor === Symbol) {
    var1; // symbol
}
if (var1.constructor === BigInt) {
    var1; // bigint
}

// Narrow a union of primitive object types
let var2: String | Number | Boolean | Symbol | BigInt;
if (var2.constructor === String) {
    var2; // String
}
if (var2.constructor === Number) {
    var2; // Number
}
if (var2.constructor === Boolean) {
    var2; // Boolean
}
if (var2.constructor === Symbol) {
    var2; // Symbol
}
if (var2.constructor === BigInt) {
    var2; // BigInt
}
