{
  // See https://www.typescriptlang.org/docs/handbook/compiler-options.html
  "compilerOptions": {
    "lib": ["dom", "dom.iterable", "esnext", "webworker", "scripthost"],
    "composite": true,
    "declaration": true,
    "declarationMap": true,
    "sourceMap": true,
    // Module settings
    "target": "esnext",
    "module": "NodeNext",
    "skipLibCheck": true, // skip type checking of all declaration files (*.d.ts)
    "resolveJsonModule": true, // include JSON files module and auto-interpret types
    "verbatimModuleSyntax": true,
    // Other settings
    "strict": true,
    "noImplicitOverride": true,
    "noUncheckedIndexedAccess": true,
    // ---exactOptionalPropertyTypes specifies that optional property types should be interpreted exactly as
    // written, meaning that `| undefined` is not added to the type.
    // This makes it possible to ensure that optional properties are never `undefined` when they're present
    // on an object, and that `undefined` values read from optional properties unequivocally indicate that
    // the properties are not present.
    // See https://github.com/microsoft/TypeScript/pull/43947
    "exactOptionalPropertyTypes": true,
    "forceConsistentCasingInFileNames": true
  }
}
