I hit an issue today after updating my v11 angular application to v12 caused by the (necessary and automated) upgrade of typescript to v4.2.4. The error concerned an import of a json file as a module:
Error: Should not import the named export 'credentials'.'clientId' (imported as 'auth') from default-exporting module (only default export is available soon)
I recently updated an Angular 6 application to version 11 and whilst this was not pretty or enjoyable, felt pretty good about being up-to-date. As part of this migration, I upgraded to using MSAL 2.0 for my authentication interception and in order to allow for a different set of Azure AD app registration settings in production, opted for a json file approach for holding the settings that could then be overwritten during the build process.
Here’s an example of such a json file:
{
"credentials": {
"clientId": "<client id>",
"tenantId": "<aad tenantid>"
},
"configuration": {
"redirectUri": "/",
"postLogoutRedirectUri": "/home"
},
"resources": {
"benbowApi": {
"resourceUri": "api/*",
"resourceScopes": [
"api://<api-id>/api.access"
]
}
}
}
To enable this to be used within my typescript, I found out that I had to enable the import of json modules in my compilerOptions of tsconfig.json:
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"outDir": "./dist/out-tsc",
"forceConsistentCasingInFileNames": true,
"strict": false,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"sourceMap": true,
"declaration": false,
"resolveJsonModule": true,
.... etc
This then allows you to import the json settings as a module:
import * as auth from './auth-config.json' ..... let clientId = auth.credentials.clientId;
This works absolutely fine in v11.
However, when I updated the app to v12 this week, my build failed with the following errors:

I tried a number of approaches to resolve this but nothing worked until I changed the import slightly and received an error tool tip on my import as a result.
import auth from './auth-config.json';
The error suggested I enable the ‘allowSyntheticDefaultImports’ which is another tsconfig compiler option.
Adding this in a setting it to true did indeed resolve my issue and allow me to build my app targeting v12 and typescript 4.2.4.
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"outDir": "./dist/out-tsc",
"forceConsistentCasingInFileNames": true,
"strict": false,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"sourceMap": true,
"declaration": false,
"resolveJsonModule": true,
"allowSyntheticDefaultImports": true,
.... etc
0 Comments