2017-01-18 58 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。我仍然不知道爲什麼其他方法不起作用,但這對我來說是一個解決方法。