awesome-typescript
awesome-typescript copied to clipboard
「重学TS 2.0 」TS 练习题第十一题
实现一个 IsEqual
工具类型,用于比较两个类型是否相等。具体的使用示例如下所示:
type IsEqual<A, B> = // 你的实现代码
// 测试用例
type E0 = IsEqual<1, 2>; // false
type E1 = IsEqual<{ a: 1 }, { a: 1 }> // true
type E2 = IsEqual<[1], []>; // false
请在下面评论你的答案。
type IsEqual<A, B> = A extends B ? (B extends A ? true : false) : false;
// 测试用例
type E0 = IsEqual<1, 2>; // false
type E1 = IsEqual<{ a: 1 }, { a: 1 }>; // true
type E2 = IsEqual<[1], []>; // false
// 第一道
type IsEqual<A, B> = A extends B ? (B extends A ? true : false) : false;
// 测试用例
type E0 = IsEqual<1, 2>; // false
type E1 = IsEqual<{ a: 1 }, { a: 1 }>; // true
type E2 = IsEqual<[1], []>; // fals
type E3 = IsEqual<{ a: 1, b: 2 }, { a: 1 }>; // false
type E4 = IsEqual<{ a: 1 }, { a: 1, b: 2 }>; // false
type IsEqual<A, B> = A extends B ? B extends A ? true : false : false
// 测试用例
type E0 = IsEqual<1, 2>; // false
type E1 = IsEqual<{ a: 1 }, { a: 1 }> // true
type E2 = IsEqual<[1], []>; // false
type IsEqual<A, B> = ((t: A, p: B) => void) extends (...args: infer R) => void ?
(R[number] extends A ? true : false) : false
// 测试用例
type E0 = IsEqual<1, 2>; // false
type E1 = IsEqual<{ a: 1 }, { a: 1 }> // true
type E2 = IsEqual<[1], []>; // false
type IsEqual<T, U> =
(<G>() => G extends T ? 1 : 2) extends
(<G>() => G extends U ? 1 : 2)
? true
: false;
//test case, it is special
type X=IsEqual<{x:any}, {x:number}>; // false
https://github.com/microsoft/TypeScript/issues/27024#issuecomment-421529650
type IsEqual<T, U> = T extends U ? U extends T ? true : false : false;
type E0 = IsEqual<1, 2>; // false
type E1 = IsEqual<{ a: 1 }, { a: 1 }> // true
type E2 = IsEqual<[1], []>; // false
type IsEqual<A, B> = A extends B ? B extends A ? true : false : false
// 测试用例
type E0 = IsEqual<1, 2>; // false
type E1 = IsEqual<{ a: 1 }, { a: 1 }> // true
type E2 = IsEqual<[1], []>; // false
type IsEqual<A, B> = // 你的实现代码 // 测试用例 type E0 = IsEqual<1, 2>; // false type E1 = IsEqual<{ a: 1 }, { a: 1 }> // true type E2 = IsEqual<[1], []>; // false
type IsEqual<A, B> = A extends B ? (B extends A ? true : false) : false;
// 实现一个 IsEqual 工具类型,用于比较两个类型是否相等。具体的使用示例如下所示:
type IsEqual<A, B> = [A] extends [B] ? [B] extends [A] ? true : false: false;
// 测试用例
type E0 = IsEqual<1, 2>; // false
type E1 = IsEqual<{ a: 1 }, { a: 1 }> // true
type E2 = IsEqual<[1], []>; // false
type E3 = IsEqual<never, never>; // true
type E4 = IsEqual<1 | 2, 2 | 1>; // true
type E5 = IsEqual<any, any>; // true
此题需要考虑联合类型以及never的问题,因此用 [] 将联合类型处理一下,避免分发处理。
type IsEqual<A, B> = A extends B ? (B extends A ? true : false) : false; // 测试用例 type E0 = IsEqual<1, 2>; // false type E1 = IsEqual<{ a: 1 }, { a: 1 }>; // true type E2 = IsEqual<[1], []>; // false
type E2 = IsEqual<never, never>; // never 这个不完美
export default {}
// 实现一个 IsEqual 工具类型,用于比较两个类型是否相等。具体的使用示例如下所示: type IsEqual<A, B> = [A] extends [B] ? [B] extends [A] ? true : false : false
// 测试用例 type E0 = IsEqual<1, 2>; // false type E1 = IsEqual<{ a: 1 }, { a: 1 }> // true type E2 = IsEqual<[1], []>; // false type E3 = IsEqual<true, false> type E4 = IsEqual<1 | 2, 2 | 1>
type IsEqual<A, B> = A extends B ? B extends A ? true : false : false;
// 测试用例
type E0 = IsEqual<1, 2>; // false
type E1 = IsEqual<{ a: 1 }, { a: 1 }> // true
type E2 = IsEqual<[1], []>; // false
type IsEqual<A, B> =
A extends B
? B extends A
? true
: false
: false
type IsEqual<T, U> = (<G>() => G extends T ? 1 : 2) extends (<G>() => G extends U ? 1 : 2) ? true : false; //test case, it is special type X=IsEqual<{x:any}, {x:number}>; // false
https://github.com/microsoft/TypeScript/issues/27024#issuecomment-421529650
@869288142 这个答案大佬能给详细解释下吗... 链接失效了
type IsEqual<A, B> = A extends B ?
B extends A ?
true :
false :
false
// 测试用例
type E0 = IsEqual<1, 2>; // false
type E1 = IsEqual<{ a: 1 }, { a: 1 }> // true
type E2 = IsEqual<[1], []>; // false
type IsEqual<A, B> = A extends B ? (B extends A ? true : false) : false; 有点想不明白 A extends B 跟 B extends A 不是一个道理么? 为何不 type IsEqual<A, B> = A extends B ? true : false; 这样 求解释
type IsEqual<A, B> = A extends B ? (B extends A ? true : false) : false;
// 测试用例
type E0 = IsEqual<1, 2>; // false
type E1 = IsEqual<{ a: 1 }, { a: 1 }>; // true
type E2 = IsEqual<[1], []>; // false
type IsEqual<A, B> = [A] extends [B] ? [B] extends [A] ? true : false : false // 测试用例 type E0 = IsEqual<1, 2>; // false type E1 = IsEqual<{ a: 1 }, { a: 1 }> // true type E2 = IsEqual<[1], []>; // false