戻り値を設定したが、認識されずエラーがでてしまう。


以下のコードがコンパイル時に「宣言された型が 'void' でも 'any' でもない関数は値を返す必要があります。」と怒られてしまいました。  
なぜこのコードではだめなのでしょうか？  
初歩的な質問で申し訳ありませんが、よろしくお願いします。

[code]

    function getTabId(): number {
      const tab = chrome.tabs.query({ active: true, currentWindow: true }, function (tabArray) {
        const id: number = tabArray[0]["windowId"];
        return id;
      });
    }
    
[/code]




まず、ご質問のコード内には「function」が2つあります。  
1つはgetTabId()の定義、もう1つはその{}内の処理中に書かれている無名関数『function(tabArray){}』です。  
そしてreturnは無名関数の中にあるので、無名関数の方のreturnとして扱われてしまっています。

getTabId()の方のreturnとして扱いたいのであれば、無名関数の外にreturnを書かなければなりません。  
以下は書き換えの一例です。

[code]

    function getTabId(): number {
      let id: number=0;
      const tab = chrome.tabs.query({ active: true, currentWindow: true }, function (tabArray) {
        id = tabArray[0]["windowId"];
      });
      return id;
    }
    
[/code]




まず、ご質問のコード内には「function」が2つあります。  
1つはgetTabId()の定義、もう1つはその{}内の処理中に書かれている無名関数『function(tabArray){}』です。  
そしてreturnは無名関数の中にあるので、無名関数の方のreturnとして扱われてしまっています。

getTabId()の方のreturnとして扱いたいのであれば、無名関数の外にreturnを書かなければなりません。  
以下は書き換えの一例です。

[code]

    function getTabId(): number {
      let id: number=0;
      const tab = chrome.tabs.query({ active: true, currentWindow: true }, function (tabArray) {
        id = tabArray[0]["windowId"];
      });
      return id;
    }
    
[/code]

