web-dev-qa-db-ja.com

TypeScript関数でJSONオブジェクトを返す

最近TypeScriptを発見し、既存のJavaScriptコードをTypeScriptに変換しようとしています。

文字列(data)から情報を取得し、それをJSONオブジェクト(json)に入れて返す関数があります。しかし、TypeScriptを使用し、戻り値の型を指定しない場合、Eclipseで次のエラーが発生します。

戻り式の中に最も一般的なタイプは存在しません

anyの戻り値の型を追加すると消えますが、これは適切な解決策ではないと思います(一般的すぎます)。そして、「json」または「object」タイプが見つかりませんでした。

私の質問は:どの戻り値の型を使用する必要がありますか?

関数は次のとおりです。

function formaterDonnees(data: string) { // or (data: string): any
    // final json object
    var json = {
        y: {
            "vars": [],
            "smps": [],
            "data": []
        }
    };

    // ...
    // processing data...
    // ...

    // put new variables in JSON (not real values below)
    json.y.data = ["data"];
    json.y.smps = ["smps"];
    json.y.vars = ["vars"];

    return json;

};
6
Hulothe

objectTypeScript 2.2の新機能 )を返すように指定することはできますが、戻り値の型を作成することはできます。

type MyReturnTypeItem = {
    vars: string[];
    smps: string[];
    data: string[];
}

type MyReturnType = {
    [name: string]: MyReturnTypeItem;
}

function formaterDonnees(data: string): MyReturnType {
    var json = {
        y: {
            "vars": [],
            "smps": [],
            "data": []
        }
    };

    // put new variables in JSON (not real values below)
    json.y.data = ["data"];
    json.y.smps = ["smps"];
    json.y.vars = ["vars"];

    return json;

};

遊び場のコード

また、 type alias を使用している間、 interfaces :でも同じことができます。

interface MyReturnTypeItem {
    vars: string[];
    smps: string[];
    data: string[];
}

interface MyReturnType {
    [name: string]: MyReturnTypeItem;
}
7
Nitzan Tomer