-
Notifications
You must be signed in to change notification settings - Fork 458
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Syntax Error with Optional Chaining in Typescript 3.7 #1283
Comments
Hi, would you please provide a minimum reproduce repo ? I noticed in your above jest config seems to not have the complete config. It would be much easier to have a repo to check your issue. |
I have this same error and my tsconfig.json is: {
"compilerOptions": {
"plugins": [{ "transform": "@zerollup/ts-transform-paths" }],
/* Basic Options */
"target": "esnext", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
// "lib": [], /* Specify library files to be included in the compilation. */
// "allowJs": true, /* Allow javascript files to be compiled. */
// "checkJs": true, /* Report errors in .js files. */
"jsx": "react", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
"declaration": true, /* Generates corresponding '.d.ts' file. */
// "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
// "sourceMap": true, /* Generates corresponding '.map' file. */
// "outFile": "./", /* Concatenate and emit output to single file. */
"outDir": "lib", /* Redirect output structure to the directory. */
"rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
// "composite": true, /* Enable project compilation */
// "removeComments": true, /* Do not emit comments to output. */
// "noEmit": true, /* Do not emit outputs. */
// "importHelpers": true, /* Import emit helpers from 'tslib'. */
// "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
// "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
/* Strict Type-Checking Options */
"strict": true, /* Enable all strict type-checking options. */
// "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
// "strictNullChecks": true, /* Enable strict null checks. */
// "strictFunctionTypes": true, /* Enable strict checking of function types. */
// "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
// "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
// "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
// "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
/* Additional Checks */
// "noUnusedLocals": true, /* Report errors on unused locals. */
// "noUnusedParameters": true, /* Report errors on unused parameters. */
// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
/* Module Resolution Options */
"moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
"baseUrl": "./src", /* Base directory to resolve non-absolute module names. */
"paths": {
"scheduler": ["types/scheduler.d.ts"],
"scheduler/unstable_mock": ["types/scheduler/unstable_mock.d.ts"],
"~/*": ["*"]
}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
// "rootDirs": ["./src"], /* List of root folders whose combined content represents the structure of the project at runtime. */
// "typeRoots": [], /* List of folders to include type definitions from. */
// "types": [], /* Type declaration files to be included in compilation. */
"allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
"esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
// "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
/* Source Map Options */
// "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
// "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
// "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
/* Experimental Options */
"experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
"emitDecoratorMetadata": true /* Enables experimental support for emitting type metadata for decorators. */
},
"exclude": [
"node_modules"
]
} |
hi @JoshRobertson , @ntucker , |
That made it work for me, though it didn't pick up my babel config from "src/.babelrc" like babel actually does. so I had to point to that file directly in the config instead of setting |
yes, you can either set to |
Close as already provided a sample working repo |
@ahnpnl does |
Ts-jest supports all forms of babel config, including package.json, js and rc. In my example repo above, I used js config. |
"ts-jest look for default location" is this hardcoded? babel picks up my file fine, but ts-config didn't unless i specify the path. |
no default location isn't hardcoded. Default location means babel config on root level, this is default behavior of |
Just to follow up, the reason my babel config was failing was
the |
I changed tsconfig.json to have "target": "ES2019" and this fixed same issue. |
I do not use babel, and I have the same issue. It indeed works when I change the |
@ahnpnl got it, thanks a lot! |
Thanks @squalsoft. Fixed my issue. FWIW |
Without this change the nullish operator cannot be used. See kulshekhar/ts-jest#1283 (comment) for details.
I needed more then @babel/preset-typescript. I upgraded it to the version @fedulovivan is using but still got compiler errors. I was able to get optional chaining (and nullish coalescing) to compile by updating these two packages: |
@BloodShok , in your screenshot, it looks to me that you have errors in your codes and IDE identified it correctly. |
Sorry I didn't specify, this is javascript after compiling TypeScript |
do you mean your screenshot above is the compiled result in javascript ? |
yes |
@BloodShok are you using TSC or babel to compile? |
the compiled result seems to not have the correct syntax at line |
so it's related to your
(this compiled result is with I'd suggest you to check your project config. It is not related to |
Ok, thank you. |
One important difference with Jest is, the transformed code have to be executed (thus, supported) by current node version (this not true when bundling them for browser). If |
Optional chaining was added in ES2020, which isn't supported by node yet. So if your 'target' compile option is ES2020 or ESNext, then typescript compiler will see an optional chaining operator and leave it alone. If your target is ES2019 or further back then typescript will transpile the feature into something that ndoe will understand . like this:
|
Along with the solutions posted above, I had to move package.json configuration to separate jest.config.js file. Then it worked :) Maybe ts-jest can work with just separate jest config file? |
@svmszcck see https://kulshekhar.github.io/ts-jest/user/config/tsConfig |
@ahnpnl But it didnt work when config is in package.json file. Now it is working. Weird -.- Anyway at least i could make it work :P |
By suggestion in kulshekhar/ts-jest#1283 (comment)
I solved this using
|
I change the target to ES2019, it worked, but target: esnext not work. if change node version to 14.X, target: esnext also works. |
This worked for me thanks !! |
Issue :
I just upgraded a repo to use Typescript 3.7 to test out optional chaining. It compiles successfully (using
webpack
and@babel/preset-typescript
). However when I run a test against the optional chaining syntax I get an error that Jest can't parse it.Expected behavior:
Test should pass as normal
Error output:
Jest.config.js:
package.json:
I'm unsure which library is causing the error (ts-jest, jest, babel, etc) but this seemed like a good place to start.
The text was updated successfully, but these errors were encountered: