在学习ts的类型的时候遇到这个问题,很是迷惑
type MyEqual<X, Y> =
(<T>() => T extends X ? 1 : 2) extends
(<T>() => T extends Y ? 1 : 2) ? true : false;
这里我理解的是判断T是否同时继承类型X,Y,从而判断X,Y是否是同一类型?(这里不理解,假如T是"symbol|number|string",X是"string",Y是:"number",岂不是得出了X与Y相同?)
还有第二个extends看上去像是判断两个数值是否相等的意思?不能用===吗?有点看不懂ts里面的extends
ts 的类型运算是没有 == 运算符的吧,所以只能用 A extends B ? C : D 表达式来判断类型是否相等。这里的 extends 可以理解为 A 是否是 B 的子集,或者子类型。
这里判断两个类型是否相等和 T 的关系不大,是通过判断两个范型函数的类型是否一致,来判断 X 和 Y 的类型是否一致。
写成这样也是可以的:
Github 讨论地址
TypeScript 的书推荐两本: