2017-06-07 11 views
8

Oto mój problem: otrzymuję ten błąd:TypeError w maszynopisie

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)); 
       } 
      } 
     } 
    } 
} 

otrzymuję ten błąd, ponieważ na linii przed dwoma skomentował linie:

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

Testowałem go przez komentarz i odkomentuj linie, ponieważ nie otrzymuję numeru linii w komunikacie o błędzie.

Czy ktoś wie, co mogę zrobić? Jeśli potrzebujesz trochę więcej kodu. Mogę pisać coś ...

Oto kod Logiczne LUB: https://pastebin.com/T28Zjbtb

+0

Zgaduję, że coś jest nie tak z LogicOr. Czy możesz opublikować definicję tej klasy? A może to ma znaczenie? https://github.com/Microsoft/TypeScript/issues/14734 – dbandstra

+0

Twoje prawo, jeśli zastąpię LogiOr z wartością null, błąd zniknie. Ale dlaczego? – leet

+0

Czy importujesz go prawidłowo i czy jest prawidłowo dostarczany? Wydaje mi się, że klasa nie istnieje już w środowisku uruchomieniowym? – dbandstra

Odpowiedz

7

Otrzymasz błąd na tej linii:

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

komunikat o błędzie jest

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

To jest bardzo łatwy do zrozumienia po zapoznaniu się z Klasami i ich działaniem (https://basarat.gitbooks.io/typescript/docs/classes.html).

Błąd oznacza, że ​​new LogicOr zawodzi, ponieważ LogicOr rozszerza coś, co jest undefined. Prosty przykład:

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

Więcej

Fix bug w LogicOr i jego łańcuch dziedziczenia.

+0

Ale LogicOr rozciąga się poprawnie od AbstractLogicExpression. Czy Maszynopis nie jest w stanie obsłużyć zależności cyklicznych? – leet

+0

'Czy Maszynopis nie jest w stanie obsłużyć zależności cyklicznych?' Jest to ograniczenie commonjs. Polecam ich usunięcie. Do analizy używam https://alm-tools.gitbooks.io/alm/content/features/dependency.html – basarat

+0

Rozwiązuję problem z zależnością cykliczną i teraz działa – leet

Powiązane problemy