2017-01-18 32 views
1

我想要的值分配给被箭头功能之外像这样定义一个变量:如何在箭头函数内部赋值outer var?

let leftPanel: PerspectivePanel; 
    let rightPanel: PerspectivePanel; 

    let temp = L.withFlex(1, L.box(direction, [ 
     L.withFlex(
      1, 
      element => { 
      element.className = 'gllayoutcell noselect'; 
      leftPanel = new PerspectivePanel(display, element, perspectiveViewerState); 
      this.registerDisposer(leftPanel); 
      }), 
     L.withFlex(
      1, 
      element => { 
      element.className = 'gllayoutcell noselect'; 
      rightPanel = new PerspectivePanel(display, element, perspectiveViewerState2); 
      this.registerDisposer(rightPanel); 
      }), 
    ]))(rootElement); 

    leftPanel.otherRenderedDataPanel = rightPanel; 
    rightPanel.otherRenderedDataPanel = leftPanel; 

但是,编译器给我的错误,该变量正在被定义之前使用。我怎样才能让内部的变量可见?

编辑:我不明白怎样才能让箭头函数在它下面的两个任务之后被调用。因为显然它正在以元素为rootElement的方式被调用。

+1

我假设这是说''leftPanel.otherRenderedDataPanel = ...'赋值行和下面的那个? –

+2

请您提供一个最简单的工作示例。我将不得不在你的例子中定义很多东西,以便甚至可以将错误显示在哪里......但是我怀疑你可以在没有你所有的缺失类型的情况下创建错误。 – Fenton

+0

是的leftPanel.otherRenderedDataPanel行提供了错误。 – Hakaishin

回答

0

编译器抱怨,因为leftPanelrightPanel可能尚未分配。这是因为它们首先被分配在你的一个箭头函数中,在编译时它将被调用时它是未知的。我假设你使用strictNullChecks: true。在这种情况下,你可以通过明确指出,各两个变量都可以undefined,然后使用类型断言解决此问题:

let leftPanel: PerspectivePanel | undefined; 
let rightPanel: PerspectivePanel | undefined; 

... 

leftPanel!.otherRenderedDataPanel = rightPanel!; 
rightPanel!.otherRenderedDataPanel = leftPanel!; 
+0

很好的建议,但后来我得到'Type'RenderedDataPanel |未定义“不可分配给类型'RenderedDataPanel'。 类型'未定义'不可分配给'RenderedDataPanel'类型。 – Hakaishin

+0

正确,这就是为什么你需要非空断言(!!后跟一个标识符)。 – MisterMetaphor

+0

我曾说过它没有帮助。 – Hakaishin

0

我定义REFT和右侧面板类的属性和内部解决的问题我可以做的箭头功能this.rightPanel.otherPanel = leftPanel。我仍然不知道为什么其他方法不起作用,但这对我来说是一个解决方法。