使用 TypeScript 函数返回 JSON 对象

Posted

技术标签:

【中文标题】使用 TypeScript 函数返回 JSON 对象【英文标题】:Return JSON object with TypeScript function 【发布时间】:2017-09-17 07:56:37 【问题描述】:

我最近发现了 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;

;

【问题讨论】:

【参考方案1】:

您确实可以指定您返回object (new to typescript 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;

;

(code in playground)

另外,虽然我使用了type alias,但您也可以使用interfaces:

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


interface MyReturnType 
    [name: string]: MyReturnTypeItem;

【讨论】:

谢谢,这正是我所需要的。能否请您简要解释一下以下语法:[name: string]: 那叫Indexable Types。我认为文档很简单,所以请检查一下,如果您仍然不明白某些内容,请再次回复,我很乐意为您提供帮助

以上是关于使用 TypeScript 函数返回 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript - 我无法使用 Angular 2 使用 http get 调用我的 json

我可以创建一个 TypeScript 类型并在 AJAX 返回 JSON 数据时使用它吗?

Typescript - 如果我想返回对象,函数返回类型

使用 TypeScript 对带有前缀的 JSON 文件键的类型定义

为什么返回的值在Typescript中为'undefined'?

在 Angular2 中使用 Typescript 读取 JSON