我想找一个泛型类型来判断类型A是否等于类型B。
类似的东西。
type Equal<A, B> = A === B ? true : false;
但是打字稿中没有 ===
运算符。
我已经检查了这个 issue 并找到了一个很好的实现。
让我们先看看一些类型。
type test18 = boolean extends false ? true : false; // return false as expected
type test19 = false extends boolean ? true : false; // return true as expected
type test20 = false extends boolean ? boolean extends false ? true : false : false; // return false as expected
type test21 = boolean extends false ? false extends boolean ? true : false : false; // return false as expected
我的问题是为什么这段代码不起作用?
type Equal<A, B> = A extends B ? B extends A ? true : false : false;
type test1 = Equal<boolean, false>; // why return boolean rather than false
为什么 test1 是 boolean
而不是 false
。
还有其他情况也行不通。
type test9 = Equal<any, string>; // boolean
type test10 = Equal<any, number>; // boolean
type test12 = Equal<string | number, number>; // boolean
type test121 = Equal<string | number, string | number>; // boolean
type test125 = Equal<{x:number} | {y:string}, {x:number} | {y:string}>; // boolean
type test13 = Equal<never, number>; // never
type test14 = Equal<never, never>; // never
type test15 = Equal<never, unknown>; // never