2017-05-01 5 views
1

angular-cli를 사용하여 생성 한 제 2 각도 프로젝트에서 제 3 자 typescript 라이브러리 (antlr - https://github.com/tunnelvisionlabs/antlr4ts)를 사용하려고합니다. 이 오류로 인해 실패했습니다. 클래스 생성자 MyLexer를 'new'없이 호출 할 수 없습니다. 아래 코드를 보면 super();를 호출하는 중 실패합니다. 또한 Lexer.js가 antlr 라이브러리의 node_modules에 있습니다.클래스 생성자가 'new'없이 호출 될 수 없습니다.

내 프로젝트에서 babel을 사용하고 있지 않지만이 다른 stackoverflow 게시물은 내 것과 비슷한 오류가 있습니다. Babel error: Class constructor Foo cannot be invoked without 'new'. 그것은 ES6 클래스가 작동하는 방식 때문에, transpiled 클래스로 네이티브 클래스를 확장 할 수 없다고 말합니다. 어떻게 든 내 문제와 관련이 있습니까? 안내해주십시오.

코드

let inputStream = new ANTLRInputStream("sometext"); 
     let lexer = new MyLexer(inputStream); // it fails here 
     let tokenStream = new CommonTokenStream(lexer); 
     let parser = new MyParser(tokenStream); 

MyLexer.ts (생성 된 코드) Lexer.js

export class MyLexer extends Lexer { 
     constructor(input: CharStream) { 
       super(input); // it fails here. 
       this._interp = new LexerATNSimulator(MyLexer._ATN, this); 
      }  
     // more code 
    } 

이 (node_modules에 앉아)

class Lexer extends Recognizer_1.Recognizer { 
    constructor(input) { 
     super(); 
//more code 

답변

1
스 니펫

그건 아주 놀라운 일입니다. 내 노드 모듈 antlr4-graps에있는 것과 같은 접근 방식을 사용하고 있는데, ES6이 transpilation target으로 설정되어 있고 모든 것이 잘 작동하고 있습니다. 거기에서 자세히 살펴보십시오. 어쩌면 코드와 다른 중요한 차이점을 발견 할 수 있습니다. antlr4ts의 최신 alpha가 설치되어 있다고 가정합니다.

+0

감사합니다. @Mike Lischke. 문제는 내가 프로젝트에서 어딘가에 ES5에 대한 참조를 가지고 있었다고 생각합니다. 나는 모든 것을 ES6으로 바꾸었고 오류가 사라졌습니다. 나는 antlr4ts가 ES6를 사용하여 변환 되었기 때문에 내 프로젝트에만 ES6을 사용해야하기 때문에 추측합니다. 그게 사실이야? 이제 다른 오류가 발생했습니다. Uncaught ReferenceError : ExpressionContext가 Object.759의 (BQLParser.ts : 136)에 정의되어 있지 않습니다. 어떤 생각? 이 오류는 생성 된 구문 분석기 코드에서 발생합니다. – user911

+1

음, antlr4ts는 주석을 포함하여 최신 ES 기능을 사용하려고합니다. 그렇기 때문에 자신의 코드도 최신 상태로 유지해야합니다 :-) 다른 오류는 별도의 질문을하십시오. 우리는 문법 코드를 봐야합니다. –

+0

고마워요! 별도의 문제를 열었습니다. – user911