如何理解判断类型相等的泛型 Equal<T, U>?

Hikamai
  • 51
河北

今天做一道 ts 类型题目,需要写一个类型相等的泛型 Equal<U, T> 返回 true 或者 false,最后的答案是这样的:

type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2) ? true : false

这里的 <T>() => T extends X 如何理解?这里用一个函数类型和 X 做类型比较,那么只要我传入的不是函数类型,得到的类型应为 2,也就是说 Equal<string, number> 应该为 true,是错误的。但实际上这样能获得正确的结果,这是为什么?这是一种特殊的语法吗?

回复
阅读 383
1 个回答
✓ 已被采纳

其实是返回值和X比较,加上括号会不会更清晰一些

type Equal<X, Y> = 
  (<T>() => (T extends X ? 1 : 2)) extends 
  (<T>() => (T extends Y ? 1 : 2)) 
  ? true : false
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏