使用FunctionConstructor连接泛型运算符<t>

时间:2016-08-05 07:49:14

标签: generics typescript

我有TS函数,它将JSON反序列化为某种类型/对象。你给它一个类型的构造函数,它试图从JSON重构该类型。

看起来像这样。

export function deserializeJSON<T>(JSONString: string, type?: FunctionConstructor, ...

我想表达一下,论证type: FunctionConstructor<T>类型的构造函数,是否可以用某种表达式实现?

更新

deserializeJSON

的示例调用
const serializedDate = JSON.stringify(new Date);
const deserializedDate = deserializeJSON<Date>(serializedDate, Date);

修改

我刚才发现,FunctionConstructor表示 的构造函数,因此最好将参数type标记为type: Function,因为所有构造函数都是函数,但是如果没有将类型转换为new type,我就无法实例化<any>。我想表达类似<T>.constructor的内容。

修改

我已经定义了界面:

interface Constructor<T> extends Function{
    new (): T;
    new (...args: Array<any>): T;
    (...args: Array<any>): T;
    prototype: T;
}

这基本上是通用的新的Function,但是这种类型是“...不能分配给类型为DateConstructor的参数”或任何其他类型的构造函数,所以最好留在{ {1}},因为它接受所有构造函数。

1 个答案:

答案 0 :(得分:2)

回答我自己的问题。

此界面需要更多测试,但似乎有效:

interface Constructor<T> extends Function {
    new (): T;
    new (...args: Array<any>): T;
    prototype: T;
}