关于ts比较两个类型是否相同问题?

这样写 判断不了只读属性和不是只读属性 有什么办法吗(这是为什么T_T)

type IsEqual<T, U> = [T] extends [U] ? ([U] extends [T] ? true : false) : false

type A = IsEqual<{ readonly a: 'A' }, { a: 'A' }> // true 但希望是false
阅读 664
1 个回答

extends 判断的依据是类型是否是 assignable(能赋值的),而 readonly 并不能影响类型的 assignable 特性。
通过 Google 找到一个能够判别 readonly 的方法,仅供参考:

type IsEqual<A, B> = (<T>() => T extends A ? 1 : 2) extends <T1>() => T1 extends B ? 1 : 2 ? true : false;

type A = IsEqual<{ readonly a: "A" }, { a: "A" }>; // false

代码出处:https://github.com/microsoft/TypeScript/issues/27024#issuecomment-510924206
希望对你有所帮助!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Microsoft
子站问答
访问
宣传栏