2016-07-05 45 views
0

我想有些JS把TS轉換和canSave方法。我的JavaScript代碼是遇到錯誤,出錯轉換JavaScript以打字稿

  scope.canSave = function() { 
 
       if (scope.category.orderNumber != scope.list) { 
 
        !_this.orderNumberAlreadyExist(scope.list, scope.category); 
 
       } 
 
      }; 
 
      
 
     

,當我」 m試圖將其轉換爲TypeScript。我在命令提示符下輸入了Type '() => void' is not assignable to type '() => boolean'Operator '!=' cannot be applied to types 'number' and 'Category[]'。我的錯誤是什麼,現在我能做什麼,有人能澄清我。

+0

['processResource'](https://docs.gradle.org/current/javadoc/org/gradle/language/jvm/tasks/ProcessResources.html)「將資源從源文件複製到其目標目錄,可能處理他們。」該命令應該如何將JavaScript轉換爲TypeScript? – str

+0

我將處理兩個命令將js轉換爲ts,它們是上面的一個和(gradlew devResource)。這些是轉換後的步驟。我在第一個命令本身獲得了上述錯誤! –

+0

幫助你我們需要知道如何聲明類別和列表(在打字稿中)。請發佈您的完整代碼以及發生錯誤的行 – iberbeu

回答

2

基本上,你遇到了這樣的事實,即TypeScript(正如名字所暗示的那樣)比JavaScript有更嚴格的類型系統,所以在後者中允許的許多事情將導致TypeScript編譯器向你大喊。

您這裏有兩個問題:

  • 某處在你的代碼,scope.canSave被定義爲不帶參數,返回一個布爾值的函數。 TypeScript將其表示爲() => boolean - 如果它將一個數字作爲參數,它會看起來像(number) => boolean,依此類推。另一方面,你的新函數定義根本不會返回任何東西。 TypeScript將這種類型的函數表示爲() => void - 它可以說明這與scope.canSave應該是不一致,所以它會給出錯誤消息。
  • scope.category.orderNumber定義爲一個數字,但scope.list定義爲Category對象的數組。這兩種類型不具有可比性(您不能將對象數組轉換爲數字),因此當您嘗試在其上使用!=運算符時,TypeScript會給出錯誤信息。

非常有效,TypeScript正在做它正在設計的目標 - 它捕獲了您的代碼可能在普通JavaScript中未被注意到的兩個問題。

+0

謝謝喬,你告訴我錯誤的原因,但我需要解決方案哥們。而且我不想更改我的JavaScript代碼,因爲我在代碼中使用的邏輯對於我的應用程序非常重要。所以我需要將其轉換爲TypeScript。 –

+0

@Becky:爲了能夠給出明確的解決方案,您需要添加最初定義變量/類型的代碼部分(換言之,您最初設置'範圍'的位置)爲你的問題;這就是修補程序必須發生的地方。 –

+0

現在我編輯了我的代碼,您可以檢查 –