实现 RemoveIndexSignature<T>,从对象类型中排除索引签名
例如:
type Foo = {
[key: string]: any
foo(): void
}
type A = RemoveIndexSignature<Foo> // expected { foo(): void }
// 答案 1
type RemoveIndexSignature<T> = {
[K in keyof T as
string extends K // 过滤掉 [k: string]
? never
: number extends K // 过滤掉 [k: number]
? never
: symbol extends K // 过滤掉 [k: symbol]
? never
: K // 剩下的就是字面量
]: T[K]
}
// 答案 2
type RemoveIndexSignature<T, P = PropertyKey> = {
[K in keyof T as P extends K ? never: K extends P ? K : never]: T[K]
}
[[002.分布式条件类型|分布式条件类型]]