From a high level perspective, kind of. Java's Bytecode behaves to Java sort of kind of like Javascript does to Typescript. They're compilation output that runs on a specific runtime on any operating system everywhere. But the difference to sth like nim is that nim goes the entire way from source code through those various IR's to machine code at compiletime (when you build a binary), while Java and TS do the last "translation" from their IR (JS/Java Bytecode) for runtime (when you're already running the program).