Equal
easyEqual:
TS Playground - An online editor for exploring TypeScript and JavaScript
type Equal<X, Y> = (<G>() => G extends X ? 1 : 2) extends(<G>() => G extends Y ? 1 : 2) ? true : false
type r1 = Equal<{ a: 'A' }, { readonly a: 'A' }> // => falsetype r2 = Equal<{ readonly a: 'A' }, { a: 'A' }> // => false
type EasyEqual<X, Y> = [X, Y] extends [Y, X] ? true : false
type r3 = EasyEqual<{ a: 'A' }, { readonly a: 'A' }> // => truetype r4 = EasyEqual<{ readonly a: 'A' }, { a: 'A' }> // => true