type Foo = { [key: string]: any foo(): void}type A = RemoveIndexSignature<Foo> // expected { foo(): void }
答案
// 答案 1type 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]}// 答案 2type RemoveIndexSignature<T, P = PropertyKey> = { [K in keyof T as P extends K ? never: K extends P ? K : never]: T[K]}