Nashorn 解析 TypeScript

Nashorn parsing TypeScript

我看到它建议 JDK 9 中的 Nashorn 应该能够解析 TypeScript,但是当我尝试这样使用它时:

        Parser              parser = Parser.create();
        CompilationUnitTree tree   = parser.parse(file, new InputStreamReader(stream), null);

https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html 的示例中,普通的 JavaScript 示例有效,但下一个添加类型声明的示例出现错误:

jdk.nashorn.internal.runtime.ParserException: a.ts:1:23 Expected , but found :
function greeter(person:string) {
                       ^
    at jdk.scripting.nashorn/jdk.nashorn.internal.parser.AbstractParser.error(AbstractParser.java:297)
    at jdk.scripting.nashorn/jdk.nashorn.internal.parser.AbstractParser.error(AbstractParser.java:282)
    at jdk.scripting.nashorn/jdk.nashorn.internal.parser.AbstractParser.expectDontAdvance(AbstractParser.java:353)
    at jdk.scripting.nashorn/jdk.nashorn.internal.parser.AbstractParser.expect(AbstractParser.java:340)
    at jdk.scripting.nashorn/jdk.nashorn.internal.parser.Parser.formalParameterList(Parser.java:3991)
    at jdk.scripting.nashorn/jdk.nashorn.internal.parser.Parser.formalParameterList(Parser.java:3966)
    at jdk.scripting.nashorn/jdk.nashorn.internal.parser.Parser.functionExpression(Parser.java:3802)
    at jdk.scripting.nashorn/jdk.nashorn.internal.parser.Parser.statement(Parser.java:1099)
    at jdk.scripting.nashorn/jdk.nashorn.internal.parser.Parser.sourceElements(Parser.java:909)
    at jdk.scripting.nashorn/jdk.nashorn.internal.parser.Parser.program(Parser.java:844)
    at jdk.scripting.nashorn/jdk.nashorn.internal.parser.Parser.parse(Parser.java:325)
    at jdk.scripting.nashorn/jdk.nashorn.internal.parser.Parser.parse(Parser.java:285)
    at jdk.scripting.nashorn/jdk.nashorn.api.tree.ParserImpl.parse(ParserImpl.java:117)
    at Main.process(Main.java:299)
    at Main.main(Main.java:113)

看起来解析器确实没有听说过 TypeScript,并且没有明显的语言变体参数。

有没有办法让这个工作,我忽略了?

没有。 Nashorn Parser API 不支持 ECMAScript ES5.1 和 ES6 版本以外的任何版本。我写了 http://mail.openjdk.java.net/pipermail/nashorn-dev/2015-February/004170.html,但在那封电子邮件中我没有提及任何有关 TypeScript 的内容。