41 lines
889 B
TypeScript
41 lines
889 B
TypeScript
|
// @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
|
||
|
}
|