typescript:带有返回

时间:2018-05-31 13:11:31

标签: javascript typescript typescript2.0

我试图通过调用另一个方法来创建一个JSON Helper类。即第二种方法取得第一种方法的结果并对其进行处理。第一种方法也应该给出Class Object。如果可能直接结果。

预期的api和Helper的结果如下。

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

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

JSONMethods.parse("{name: 'hello'}").extract(Department); // { id: 0, name: 'hello'}

我已经创建了一个类作为JSONMethods并定义了这些方法。但不知道如何进步。找到下面的代码。



class Department {
    id: number = 0;
    constructor() { }
}

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

    static format() {
         return this.data;
    }

    static extract<T>(entity: 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.*
    }
}
&#13;
&#13;
&#13;

我期待上面的结果。此外,提取方法不应该在JSONMethods中不能使用解析方法。我可以把它变成私人的。但是如何从解析中访问extract方法。

有点困惑。任何人都可以支持这个。

1 个答案:

答案 0 :(得分:2)

您需要传入类的构造函数而不是类的实例。因此,entity: T应该是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);
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); 

我可能也建议在这种情况下避免使用静态fiedls,如果有人不按照你期望的方式使用这些功能,你可能会遇到麻烦。

'uploads' => [
     'driver' => 'local',
     'root'   => public_path().'/storage
]