Javascript typescript:带有带返回的嵌套方法的帮助器类

Javascript typescript:带有带返回的嵌套方法的帮助器类,javascript,typescript,typescript2.0,Javascript,Typescript,Typescript2.0,我试图通过在另一个类的顶部调用方法来创建JSON帮助器类。i、 第二种方法从第一种方法中提取结果并进行处理。第一个方法也应该给出类对象。如果可能,直接结果 助手的预期api和结果如下所示 JSONMethods.parse("{name: 'hello'}") // { name: 'hello'} JSONMethods.parse("{name: 'hello'}").format() // { name: 'hello'} JSONMethods.parse("{name: 'hell

我试图通过在另一个类的顶部调用方法来创建JSON帮助器类。i、 第二种方法从第一种方法中提取结果并进行处理。第一个方法也应该给出类对象。如果可能,直接结果

助手的预期api和结果如下所示

JSONMethods.parse("{name: 'hello'}") // { name: 'hello'}

JSONMethods.parse("{name: 'hello'}").format() // { name: 'hello'}

JSONMethods.parse("{name: 'hello'}").extract(Department); // { id: 0, name: 'hello'}
我已经创建了一个名为JSONMethods的类,并定义了这些方法。但不确定如何取得进展。找到下面的代码

班级部门{
id:number=0;
构造函数(){}
}
类JSONMethods{
私有静态数据;
静态解析(json:string | U):JSONMethods{
if(typeof json=='string'){
this.data=JSON.parse(JSON);
}
否则{
this.data=json;
}
return json;//不实际返回JSONMethods
}
静态格式(){
返回此.data;
}
静态提取(实体:T){
return Object.assign(new entity(),this.data);//获取new entity()的编译问题。as*无法将“new”与类型缺少调用或构造签名的表达式一起使用*
}

}
您需要传入类的构造函数,而不是类的实例。因此,它应该是
entity:new()=>T

class JSONMethods {
    private static data;
    static parse<U>(json: string | U): typeof JSONMethods {
        if (typeof json == 'string') {
            this.data = JSON.parse(json);
        }
        else {
            this.data = json;
        }
        return this;
    }

    static format() {
        return this.data;
    }

    static extract<T>(entity: new () => T) {
        return Object.assign(new entity(), this.data); // getting compilation issue with new entity(). as *Cannot use 'new' with an expression whose type lacks a call or construct signature.*
    }
}

JSONMethods.parse("{name: 'hello'}") // { name: 'hello'}

JSONMethods.parse("{name: 'hello'}").format() // { name: 'hello'}

JSONMethods.parse("{name: 'hello'}").extract(Department); 
classjsonmethods{
私有静态数据;
静态解析(json:string | U):JSONMethods的类型{
if(typeof json=='string'){
this.data=JSON.parse(JSON);
}
否则{
this.data=json;
}
归还这个;
}
静态格式(){
返回此.data;
}
静态提取(实体:new()=>T){
return Object.assign(new entity(),this.data);//获取new entity()的编译问题。as*无法将“new”与类型缺少调用或构造签名的表达式一起使用*
}
}
parse(“{name:'hello'}”)/{name:'hello'}
JSONMethods.parse(“{name:'hello'}”).format()/{name:'hello'}
parse(“{name:'hello'}”).extract(Department);
我还建议您避免使用静态字段。在这种情况下,如果有人没有按照您期望的方式使用这些函数,您可能会在以后遇到麻烦

class JSONMethods {
    private data;
    static parse<U>(json: string | U): JSONMethods {
        var r = new JSONMethods()
        if (typeof json == 'string') {
            r.data = JSON.parse(json);
        }
        else {
            r.data = json;
        }
        return r;
    }

    format() {
        return this.data;
    }

    extract<T>(entity: new () => T) {
        return Object.assign(new entity(), this.data); // getting compilation issue with new entity(). as *Cannot use 'new' with an expression whose type lacks a call or construct signature.*
    }
}

let s = JSON.stringify({name: 'hello'});
JSONMethods.parse(s) // { name: 'hello'}
JSONMethods.parse(s).format() // { name: 'hello'}
JSONMethods.parse(s).extract(Department); 
classjsonmethods{
私人数据;
静态解析(json:string | U):JSONMethods{
var r=新的JSONMethods()
if(typeof json=='string'){
r、 data=JSON.parse(JSON);
}
否则{
r、 data=json;
}
返回r;
}
格式(){
返回此.data;
}
提取(实体:new()=>T){
return Object.assign(new entity(),this.data);//获取new entity()的编译问题。as*无法将“new”与类型缺少调用或构造签名的表达式一起使用*
}
}
让s=JSON.stringify({name:'hello'});
JSONMethods.parse/{name:'hello'}
JSONMethods.parse(s).format()/{name:'hello'}
JSONMethods.parse.extract(Department);
hi prem,在parse()函数中,您是否希望返回这个.data而不是json?