我有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}},因为它接受所有构造函数。
答案 0 :(得分:2)
回答我自己的问题。
此界面需要更多测试,但似乎有效:
interface Constructor<T> extends Function {
new (): T;
new (...args: Array<any>): T;
prototype: T;
}