Repository navigation
Compile time errors being suppressed when using esm #2129
Description
Activity
Just a heads up that my error was due to the server.ts file having a variable in an "if" check which I hadn't initialized yet, e.g.
app.get("/hut/:locationId", (req: Request, res: Response) => { const data = req.params.locationId; if (!location_id) { // <---- location_id was not not instantiated anywhere res.status(400).send("Bad Request: Missing locationId"); } else { res.render('hut_template', data); } });The reason my tsc compilation wasn't catching was due to the same variable name "location_id" being instantiated in another .ts file so I was going mad to search for the cause...
I encountered this error when there was no use of a defined variable or function, it happens when I execute the script using
ts-node, let's saynode --loader ts-node/esm scripts/myscript.ts.
And then I did some research and tried a simple trick, and the error went away.// the linter will help you with this const someVar: any // intended to use later, I want to check it out first // const _falseCall = (_any: any) => { }; _falseCall(someVar); // what about this // You must use this function or it will trigger errors const myFutureFunc = ()=> { // ... // lines of codes // ... } // _falseCall(myFutureFunc); // I tried this and the error went away // ... // tons of lines // ...
here is my
.eslintrc.cjs:module.exports = { root: true, env: { browser: true, es2020: true }, extends: [ 'eslint:recommended', 'plugin:@typescript-eslint/recommended', 'plugin:react-hooks/recommended', ], ignorePatterns: ['dist', '.eslintrc.cjs'], parser: '@typescript-eslint/parser', plugins: ['react-refresh'], rules: { 'react-refresh/only-export-components': [ 'warn', { allowConstantExport: true }, ], }, }
To conclude, if I know which variables or functions are not used, I try to comment out on them.
However, there is a suggestion to enable type-aware lint rules, check it out here.
I don't know if it helps.This seems to be a general issue of how any
UncaughtExceptionis shown when ts-node/esm processes a file. It makes logs checking impossible as it always ends up showing the same cryptic result:node:internal/modules/run_main:123 triggerUncaughtException( ^ [Object: null prototype] { [Symbol(nodejs.util.inspect.custom)]: [Function: [nodejs.util.inspect.custom]] }
The workaround to fix this is to make ts-node log TS errors to stderr instead of throwing exceptions (credits to this comment):
/* tsconfig.json */ { /* ... */ "ts-node": { "logError": true, "pretty": true /* <= technically not required */ } }
Reacted by Ruben DESERT, Mike Staub, Denis Belyaev, Renzo Vargas Torres, Kishan Singh and xiaodyReacted by Nikhil Sinha and Janelle Uy@snowbytes this solution is working for me, thanks 👍
Reacted by snowbytes
I really struggled to think of the correct title for this, so please edit it as required. I went down a rabbithole today whilst moving one of our apps to
esm, as it was failing to start (with ts-node) due to the following node error:Doesn't really give away much. It turned out however that the root caused we missed a return type on a promise
eg Promiseneeded to bePromise<void>. This error was visible if you did atsc, butts-nodewas giving this output.After gradually chipping away at the code to make a minimal example; i managed to reproduce it with a really simple bit of code that doesn't even technically have an error in it.
Assuming your code is in
./lib, create./lib/index.ts:and
./lib/server.ts:If you try and start this; you'll get the error. The only thing "wrong" with this code is the fact that
webServeris an unused variable. If i addconsole.log(webServer), eg:Then all is well:
Specifications