{
  // 指定需要编译的文件,使用 globs：**/* （一个示例用法：some/folder/**/*）意味着匹配所有的文件夹和所有文件（扩展名为 .ts/.tsx，当开启了 allowJs: true 选项时，扩展名可以是 .js/.jsx）。
  "include": ["./src/**/*"],
  // 排除的文件
  "exclude": ["node_module"],
  // tsconfig.json文件具有一个新的顶级属性，即参考数组。 它是一组对象，用于指定要引用的项目
  "references": [],
  "compilerOptions": {
    // 允许从没有设置默认导出的模块中默认导入。
    "allowSyntheticDefaultImports": true,
    // 符合模式
    "composite": true,
    // 自动生成描述d.ts
    "declaration": true,
    // 自动生成描述d.ts.map文件
    "declarationMap": true,
    // 支持使用import d from cjs的方式引入commonjs
    "esModuleInterop": true,
    // 指定 jsx 代码的生成 'preserve', 'react-native', or 'react'
    // preserve模式将保持JSX作为输出的一部分，以便由另一个变换步骤（例如Babel）进一步编译,输出将具有.jsx文件扩展名
    // react模式将编译React.createElement，在使用之前不需要经过JSX转换，输出将具有.js文件扩展名
    "jsx": "react",
    // 生成的模块形式: 'commonjs', 'amd'等
    "module": "esnext",
    // 选择模块解析策略： 'node' (Node.js) or 'classic' (TypeScript pre-1.6)
    "moduleResolution": "node",
    // 允许引入*.json文件
    "resolveJsonModule": true,
    // 生成相应的 '.map' 文件
    "sourceMap": true,
    // 隐式抑制任何索引错误
    "suppressImplicitAnyIndexErrors": true,
    // 最终生成
    "target": "esnext",
    // 用来控制输出目录结构,表示和examples下结构一致
    "rootDir": "./src",
    // 指定输出目录
    "outDir": "./dist",
    // 启用所有严格类型检查选项
    "strict": true,
    // 在表达式和声明上有隐含的 any类型时报错
    "noImplicitAny": false,
    // 启用严格的 null 检查
    "strictNullChecks": false,
    // 当 this 表达式值为 any 类型的时候，生成一个错误
    "noImplicitThis": true,
    // 以严格模式检查每个模块，并在每个文件里加入 'use strict'
    "alwaysStrict": true,
    // 包含类型声明的文件列表
    "typeRoots": ["node_modules/@types", "src/@types"],
    // 需要包含的类型声明文件名列表
    "types": ["jest", "react", "react-dom"]
  }
}
