I try to use typescript 3.7 features like Optional Chaining, Nullish Coalescing. But webpack gives me an error while transpaling.
app: Module parse failed: Unexpected token (50:40) app: File was processed with these loaders: app: * ../../../node_modules/ts-loader/index.js app: You may need an additional loader to handle the result of these loaders. app: | export const Layout = (props) => { app: | const regionsResults = useQuery(regionsQuery, { fetchPolicy: 'cache-first' }); app: > const regions = regionsResults.data?.regions ?? []; app: | const userItem = useQuery(usersProfileQuery, { fetchPolicy: 'cache-first' }); app: | const handleOnClick = (selected) => props.history.push(selected.key); ``
Optional chaining is often used together with nullish coalescing, which is the ability to fall back to a default value when the primary expression evaluates to null or undefined .
Relationship with the optional chaining operator ( ?. ) The nullish coalescing operator treats undefined and null as specific values and so does the optional chaining operator ( ?. ) which is useful to access a property of an object which may be null or undefined .
I changed target: esnext to es2018 in tsconfig.json file. Now it works.
Webpack issue for reference : https://github.com/webpack/webpack/issues/10227
Depending on which loader you're using to transiple the code, there are several options available
For ts-loader, you need to make sure the output from typescript is understandable by Webpack. This can be achieved by setting target to ES2018 in tsconfig.json.
For babel-loader, you'll need to make sure babel loads the
@babel/plugin-proposal-nullish-coalescing-operator @babel/plugin-proposal-optional-chainingplugins. Note that if you're using preset-env, it may or may not load these plugins depending on your targets or browserlist (ie, won't be loaded if the target env has support for these language features), in which case the only way to guarantee their inclusion is by manually specifying them in the plugins array in babel.config.js,
plugins: [ '@babel/plugin-proposal-nullish-coalescing-operator', '@babel/plugin-proposal-optional-chaining', ],
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With