网站搜索

在 TypeScript 中,有没有办法让 keyof 在高阶类型上工作?


给定一个类 C,keyof C 是由类的成员组成的类型。

然而,对于一个继承自 C 的匿名类,似乎无法获取其成员。

对于以下最小复现,类型 t1 可以被 TypeScript 推断出来,但类型 t2 无法被推断。

TypeScript 似乎将常量 D 的声明视为一个值,而它的类型信息似乎无法被 typeof 使用。

type Constructor<T> = new (...args: any[]) => T;
class C {
    public a: number = 0;
    public b: number = 1;
}

function hoc(Base: Constructor<C>) {
    return class extends Base {
        public x: string = 'test'
    }
}

const D = hoc(C);
type t1 = keyof C;
type t2 = keyof D;

TypeScript 游乐场重现

答案#1

type t2 = keyof InstanceType<typeof D>;