typescript 类型体操 Remove 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 : K]: T[K]
}

这里面的 K in keyof T as string extends K 是怎么执行的呢, 是把每一个键都变成字符串然后 extends K 吗? foo() as string 为什么不相等呢

阅读 1.7k
3 个回答
[K in keyof T as (string extends K ? never : K)]: T[K]

是的,因为string extends 'foo'结果为false,所以取下了'foo':()=>void这一类型。

新手上路,请多包涵
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进