我有以下增强类类型的函数:
export interface TypeClass<A> {
instance: (constructor: A, methods?: object) => void;
}
export function type<A extends { new (name: string) }>(Class: A):
TypeClass<A> {
let name = Class.name;
let TypeClass = <A & TypeClass<A>>Class;
TypeClass.instance = () => // impl
TypeClass.prototype; // typescript recognises type has a prototype
return TypeClass;
}
但是当我来使用这个功能时。
const MyType = type(class MyClass {});
MyType.prototype; // typescript does not recognise prototype
如何告诉typescript返回类型将有原型?
答案 0 :(得分:1)
如果我对您的函数的理解是正确的,那么将返回的对象将是Class
参数(这是一种类型),并使用instance
函数进行扩充。您的函数返回TypeClass<A>
这只是扩充界面,它应该返回A & TypeClass<A>
,这意味着返回值将同时具有A
和TypeClass<A>
的形状: / p>
export function type<A extends { new(name: string) }>(Class: A): A & TypeClass<A> {
let name = Class.name;
let TypeClass = <A & TypeClass<A>>Class;
…
return TypeClass;
}
const MyType = type(class MyClass { });
MyType.prototype; // works