【发布时间】:2021-11-07 22:10:48
【问题描述】:
type A = {
a: number;
b: string;
};
type B = {
b: number;
c: boolean;
};
我测试了extends关系,结果是真的:
type Expected1 = Pick<A & B, keyof A | keyof B> extends A & B ? true : false; // true
type Expected2 = A & B extends Pick<A & B, keyof A | keyof B> ? true : false; // true
但是 Equal 类型是虚假的:
type Equal<X, Y> =
(<T>() => T extends X ? 1 : 2) extends
(<T>() => T extends Y ? 1 : 2) ? true : false
type Expected3 = Equal<A & B, Pick<A & B, keyof A | keyof B>> // false
谁能告诉我为什么?
【问题讨论】:
-
我通常看到
Equal写成更简单的type Equal<X, Y> = X extends Y ? Y extends X ? true : false : false,它在此处返回true。 tsplay.dev/wQKQjm 不是 100% 确定为什么相等性检查失败。 -
附加一个关于这个
Equal类型的reference link
标签: typescript types extends