使用打字稿进行通用类型防护

时间:2019-03-04 03:30:36

标签: javascript typescript ecmascript-6

abstract class A {

}

class B extends A {
    public static readonly TYPE = "A";
}

interface forValue<T extends { TYPE: string }> {
    type: T["TYPE"]
}

上面的方法工作得很好,现在我希望能够使用它而不必这样做:forValue<typeof (T extends A)>对于A,T的每个子类。

所以我想要这样的东西:

type forClass<T extends A> = forValue<typeof T>;

但是出现错误TS2693: 'T' only refers to a type, but is being used as a value here.。我不认为打字稿会在T之前接typeof。如果我将T替换为B,即:

type forClass<T extends A> = forValue<typeof B>;

它工作正常。

这是一个错误吗?

0 个答案:

没有答案