我试图使用带有此签名的TypedJSON函数:
parse<T>(text: string, type: {
new (): T;
}, settings?: SerializerSettings): T;
我想要的功能与此类似:
function processJson<T>(json: string, processor: (jsonObject: T) => any): void {
let t: T;
let ob = TypedJSON.parse(json, t);
processor(ob);
}
然而,这不会进行类型检查,因为:
类型&#39; T&#39;不能分配给&#39; new()=&gt;类型的参数{}&#39;
所以我添加了一些额外的类型信息:
function processJson<T extends { new (): T; }>(json: string, processor: (jsonObject: T) => any): void {
let t: T;
let ob = TypedJSON.parse(json, t);
processor(ob);
}
现在进行类型检查,但是当我来使用它时......
@JsonObject
class Foo {
@JsonMember
public X: number;
}
processJson<Foo>("{'X': 12}", (f: Foo) => {});
...我收到此错误:
输入&#39; Foo&#39;不满足约束&#39; new()=&gt;美孚&#39 ;.输入&#39; Foo&#39;不提供签名的匹配&#39; new():Foo&#39;。
除了我当然可以做到这一点没问题:
let f = new Foo();
我是Typescript的新手。我可以使用一些神奇的咒语来解决这个问题吗?或者失败了,有什么方法可以忽略这种类型检查吗?