TypeScript: 类型体操

从 Array 中解析出 type

type FooArr = {
    foo: string;
    bar: number;
}[]
type Foo = FooArr[number]

取出对象指定类型属性的所有的 key

以对象的 function 属性为例

type FuncTypeKeys<T extends object> = {
   [K in keyof T]-?: T[K] extends Function ? K : never;
}[keyof T];

这里 keyof T 的作用就是取出 K 的所有值