指定返回类型是typescript中的构造函数或类

时间:2018-02-27 22:53:31

标签: typescript

我有以下增强类类型的函数:

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返回类型将有原型?

1 个答案:

答案 0 :(得分:1)

如果我对您的函数的理解是正确的,那么将返回的对象将是Class参数(这是一种类型),并使用instance函数进行扩充。您的函数返回TypeClass<A>这只是扩充界面,它应该返回A & TypeClass<A>,这意味着返回值将同时具有ATypeClass<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