【问题标题】:TypeScript function arrow expression returning objectTypeScript 函数箭头表达式返回对象
【发布时间】:2012-09-30 07:56:01
【问题描述】:

我有这样的情况:

interface MoverShaker {
    getStatus(): { speed: number; frequency: number; };
}

function GetMoverShaker() : MoverShaker {
    return {
        getStatus: () => { speed: 2, frequency: 3 }
    }
}

我收到这样的错误:当前范围内不存在名称“频率”。在 TypeScript 中可以进行这样的构造吗?如果我使用这种结构,那么一切正常:

function GetMoverShaker(): MoverShaker {
    return {
        getStatus: () => {
             return { speed: 2, frequency: 3 }
        }
}

【问题讨论】:

    标签: typescript


    【解决方案1】:

    您可以添加括号:

    () => ({x:1,y:2})
    

    这使解析器明白 { 不是代码块的开头。

    【讨论】:

    • 你也可以通过演员来做到这一点。 () => <any>{x:1,y:1}
    • 我不喜欢投射到 any。实际上,在向接口添加新属性时,我也被强制转换为所需的输出接口类型。当我从(任何)对象文字进行显式转换时,即使文字缺少新属性,VS Code 也没有标记任何错误。
    【解决方案2】:

    在您的第一个语句中,您没有返回对象。 如果您想忽略返回 object 的箭头函数中的 return 关键字,则需要将直接返回的值包装在 () 中。

    这会让你的函数看起来像这样

    function GetMoverShaker() : MoverShaker {
        return {
            getStatus: () => ({ speed: 2, frequency: 3 })
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多