TypeScript 5.8 added erasableSyntaxOnly. It makes the compiler report constructs that cannot be removed by pure erasure, which is exactly the set that Node's --experimental-strip-types refuses: enum declarations, namespace blocks with runtime members, constructor parameter properties, and import x = require(...).
Without it, the mismatch shows up late. tsc compiles cleanly, tests pass under a bundler, and then node app.ts fails at load with a syntax error naming the construct. Turning the flag on moves that failure into the type check where it belongs.
The replacements are direct: a const object with as const plus a derived union type instead of an enum, a plain module with named exports instead of a namespace, and explicit field assignments in the constructor body instead of parameter properties. declare enum and ambient namespaces stay legal because they emit nothing. Enable this in any project that intends to run TypeScript sources through Node without a build step.