Skip to content

Latest commit

 

History

History

1367-RemoveIndexSignature-medium

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

1367 Remove Index Signature

关键词: TypeScript, TypeChallenge

实现RemoveIndexSignature<T>类, 将给定对象类型的索引 , 去除对象的 index signature 属性

举个栗子:

type Foo = {
  [key: string]: any;
  foo(): void;
};

type A = RemoveIndexSignature<Foo>; // expected { foo(): void }

答案

type RemoveIndexSignature<T> = {
  [K in keyof T as string extends K ? never : number extends K ? never : K]: T[K]
};

分析

去除 index signature, 即去除原对象中stringnumber类型的 key, 利用 TS 中的as关键字我们很容易做到:

type RemoveIndexSignature<T> = {
  [K in keyof T as (string extends K ? never : number extends K ? never : K)]: T[K]
  // ---------------^^^^^^^^^^^^^^^^ 如果 K 是 string 或 number 返回 never, 否则照常返回
  // 此操作相当于 filter 了 K, 返回 never 的丢弃, 同时 map 了 K, 只是 map 的结果是原样返回
};