- Error
- Reported by the lexer and parser
TS8009
The '{0}' modifier can only be used in TypeScript files.
A TypeScript-only modifier like `public`, `private`, `readonly` or `declare` appears in a JavaScript file. Remove it.
What it means
Modifiers that only exist in TypeScript (public, private, protected, readonly, abstract, declare, override and similar) can't appear in a .js file. The message names the modifier.
ts-r's parser reports this code when it reads .js files with tsc's rules for TypeScript syntax in JavaScript. ts-r-check doesn't report it yet: today it parses .js files with the plain JavaScript grammar and reports a syntax error at the same place instead.
Example
class Account {
private balance = 0;
}
cargo run -p ts_r_parser --example dump -- index.js --ts-in-js report ts-r outputindex.js(2,3): error TS8009: The 'private' modifier can only be used in TypeScript files.
Recorded by node scripts/verify-examples.mjs with ts-r built from commit 6deaf01. The example uses the default tsconfig: strict, target: es2022, module: esnext, moduleResolution: bundler.
How to fix
- Remove the modifier. For real privacy at runtime, use a
#privatefield:#balance = 0;. - Rename the file to
.tsif it's meant to be TypeScript.