以下为ChatGPT自动生成的解答,正确与否请自行判断。 也许你也可以从大家的发帖中找到想要的答案!

BFE.devAI解答 - TypeScript 类型谜题
35. implement Filter<T, A>

type Filter<T extends any[], U> = {  [K in keyof T]: T[K] extends U ? T[K] : never;}[number];

解释:

我们定义了一个泛型类型Filter,其中T表示被过滤的元素组成的元组类型,U表示过滤条件的类型。

我们给Filter一个属性签名,使用了索引类型查询和映射类型:

[K in keyof T]: T[K] extends U ? T[K] : never;

该属性签名表示,对于T中的每一个元素,如果该元素的类型能够赋值给U类型,则该元素保留;否则该元素的类型为never。最终该属性签名返回的是一个never类型和一个U类型的联合类型。 然后,在属性签名后加上[number],表示取出该联合类型中的所有U类型元素,组成的新数组即为满足条件的元素。

举个例子,比如A = Filter<[1,'BFE', 2, true, 'dev'], number>

  1. 对于1这个元素,其类型是number,能够赋值给U类型,因此保留;
  2. 对于'BFE'这个元素,其类型不是number,因此被替换为never类型;
  3. 对于2这个元素,其类型是number,能够赋值给U类型,因此保留;
  4. 对于true这个元素,其类型不是number,因此被替换为never类型;
  5. 对于'dev'这个元素,其类型不是number,因此被替换为never类型。

因此,最终返回的数组中只有12两个元素,而且它们的类型是number