2012-10-09 43 views
33

我有这样的情况下:打字稿功能箭头表达返回对象

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 } 
     } 
} 

回答

97

您可以添加的括号:

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

这使得解析器明白,{不是一个代码块的开始。

+14

你也可以通过转换来做到这一点。 '()=> {x:1,y:1}' –

+0

我不喜欢投射*任何*。实际上,我在刚刚添加一个新属性到接口时,通过强制转换为所需的输出接口类型而被咬伤。当我从(任何)对象文字中进行显式转换时,即使字面值缺少新属性,VS Code也没有标记任何错误。 – superjos