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