microsoft / TypeScript

TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
https://www.typescriptlang.org
Apache License 2.0
100.22k stars 12.39k forks source link

feature request: expose `tsconfig.json` types in TypeScript files #59261

Open hamirmahal opened 2 months ago

hamirmahal commented 2 months ago

🔍 Search Terms

expose tsconfig.json types to developers

✅ Viability Checklist

⭐ Suggestion

It'd be nice if TypeScript developers could enforce that an object is consistent with tsconfig.json.

📃 Motivating Example

If you're creating a tool that initializes a project that uses TypeScript, you can ensure the tsconfig.json you're composing in your source code is valid.

const tsConfig: TSConfig = {
  "compilerOptions": {
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "module": "NodeNext"
  }
};

fs.writeFileSync(
  path.join(root, "tsconfig.json"),
  JSON.stringify(tsConfig, null, 2)
);

💻 Use Cases

  1. What do you want to use this for?

I'm building a tool that initializes a TypeScript project with other dependencies.

It'd be kind of nice if I could be 100% certain the tsconfig.json I'm composing in my source code is valid.

  fs.writeFileSync(
    path.join(root, "tsconfig.json"),
    JSON.stringify(
      {
        compilerOptions: {
          target: "ESNext",
          module: "CommonJS",
          jsx: "react-jsx",
        },
        include: ["src"],
        exclude: ["node_modules"],
      },
      null,
      2
    )
  );
  1. What shortcomings exist with current approaches?

In .ts source code, TypeScript doesn't verify if a tsconfig.json file being written to disk is valid or not.

  1. What workarounds are you using in the meantime?

I'm copying over an existing tsconfig.json file from a template/ subdirectory.

RyanCavanaugh commented 2 months ago

Someone can write this and put it on DefinitelyTyped; there's not really a reason this needs to be baked in to TS itself.