基本上,我在问为什么不能编译:
interface Constructor<T> {
new (...args: any[]): T;
}
function ConstructorFactory<T>(t: T) {
return t as any as Constructor<T>; // pretend we build a new class surrounding t somehow
}
class A extends ConstructorFactory({a: 11}) {
}
function AFactory<T>(t: T) {
return class AnonymousA extends ConstructorFactory(t) {
};
}
错误是AnonymousA
的行,并说:
Base constructor return type 'T' is not a class or interface type.
我无法掌握的主要原因是我能够定义class A
好,但不能定义AnonymousA
。生成的javascript看起来非常相似,所以我非常确定这是一个bug,匿名类和常规类之间的细微差别,或者我还没有学过类型的东西。我的赌注是第三种选择?
对于上下文,这来自于尝试将immutablejs记录用作类。关于这个问题有很多帖子没有用,但我还没有找到任何人解释我认为可能是一个更简单的例子?
另外,我只是快速写了ConstructorFactory
草图,我知道它实际上并没有返回Constructor<T>
。但我非常确定打字稿会将其视为正确的类型。
感谢您的帮助!对不起,如果这是一个重复的问题。