Typescript

时间:2017-07-02 16:16:36

标签: typescript

我试图使用带有此签名的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的新手。我可以使用一些神奇的咒语来解决这个问题吗?或者失败了,有什么方法可以忽略这种类型检查吗?

1 个答案:

答案 0 :(得分:0)

这似乎放弃了打字:

let ob = TypedJSON.parse(json, t as any);

Related question

相关问题