2017-06-07 432 views
8

這裏我的問題: 我得到這個錯誤:類型錯誤的打字稿

Uncaught TypeError: Object prototype may only be an Object or null: undefined

export abstract class AbstractLogicExpression { 
    protected _logicChildExpressions: AbstractLogicExpression[] = Array(); 
    protected _precedence = 0; 
    protected _parsed = false; 
    protected _expressionType = ""; 

    protected rightAssociative = false; 

    public toDNF() { 
     for (let i = 0; i < this.logicChildExpressions.length; i++) { 
      let actualLogicExpression: AbstractLogicExpression = this.logicChildExpressions[i]; 

      if (actualLogicExpression._expressionType == "~") { 

       let logicConjunction = actualLogicExpression.logicChildExpressions[0]; 

       let var1 = logicConjunction.logicChildExpressions[0]; 
       let var2 = logicConjunction.logicChildExpressions[1]; 

       if (logicConjunction._expressionType == "*") { 
        actualLogicExpression.logicChildExpressions[0] = new LogicOr(); 
        //actualLogicExpression.logicChildExpressions[0].add(new LogicNeg(var1)); 
        //actualLogicExpression.logicChildExpressions[0].add(new LogicNeg(var2)); 
       } 
      } 
     } 
    } 
} 

我得到這個錯誤,因爲該行的前兩個註釋行:

actualLogicExpression.logicChildExpressions[0] = new LogicOr(); 

我測試通過評論和取消註釋行,因爲我在錯誤消息中沒有行號。

有人知道我能做什麼嗎? 如果您需要更多的代碼。我可以張貼的東西...

這裏LogicOr的代碼: https://pastebin.com/T28Zjbtb

+0

我猜LogicOr有問題。你能發表該類的定義嗎?也許這是相關的? https://github.com/Microsoft/TypeScript/issues/14734 – dbandstra

+0

你的權利,如果我用空替換LogiOr錯誤消失。但爲什麼? – leet

+0

您是否正確導入它,並確保它正確綁定?在我看來,這個類在運行時不再存在? – dbandstra

回答

7

您在這條線得到一個錯誤:

actualLogicExpression.logicChildExpressions[0] = new LogicOr();

的錯誤消息是

Uncaught TypeError: Object prototype may only be an Object or null: undefined

它一旦你熟悉課程及其工作方式(https://basarat.gitbooks.io/typescript/docs/classes.html),就很容易理解。

該錯誤表示new LogicOr失敗,因爲LogicOr擴展了undefined。簡單的例子:

let Bar; 
class Foo extends Bar { } // Uncaught TypeError: Object prototype may only be an Object or null: undefined 

更多

修正了LogicOr和錯誤繼承鏈。

+0

但LogicOr從AbstractLogicExpression正確地擴展。 Typescript是否無法處理循環依賴? – leet

+0

'Typescript是否無法處理循環依賴?'這是commonjs的限制。建議刪除它們。對於分析我使用https://alm-tools.gitbooks.io/alm/content/features/dependency.html – basarat

+0

我解決了循環依賴的問題,現在它工作 – leet