# Setup a polyrepo

Execute the following steps to setup TypeScript for a polyrepo solution (single project per repository) 👇

# Install the packages

Open a terminal at the root of the solution and install the following packages:

pnpm add -D @workleap/typescript-configs typescript
yarn add -D @workleap/typescript-configs typescript
npm install -D @workleap/typescript-configs typescript

# Configure TypeScript

First, create a configuration file named tsconfig.json at the root of the solution:

root
├── src
├──── ...
├── package.json
├── tsconfig.json

Then, open the newly created file and extend the default configuration with one of the shared configurations provided by @workleap/typescript-configs 👇

# web-application

For an applications developed with React, use the following configuration:

tsconfig.json
{
    "extends": ["@workleap/typescript-configs/web-application.json"],
    "exclude": ["dist", "node_modules"]
}

If your application is using Storybook, make sure to include the .storybook folder:

tsconfig.json
{
    "extends": ["@workleap/typescript-configs/web-application.json"],
    "include": ["**/*", ".storybook/*"],
    "exclude": ["dist", "node_modules"]
}

# library

For a library project developed with or without React, use the following configuration:

tsconfig.json
{
    "extends": ["@workleap/typescript-configs/library.json"],
    "exclude": ["dist", "node_modules"]
}

If your application is using Storybook, make sure to include the .storybook folder and exclude the .storybook/storybook-static folder:

tsconfig.json
{
    "extends": ["@workleap/typescript-configs/library.json"],
    "include": ["**/*", ".storybook/*"],
    "exclude": ["dist", "node_modules", ".storybook/storybook-static"]
}

# Add a CLI script

At times, especially when running the CI build, it's useful to lint the entire solution using a single command. To do so, add the following script to your solution's package.json file:

package.json
{
    "lint:types": "tsc"
}

# Custom configuration

New projects shouldn't have to customize the default configurations offered by @workleap/typescript-configs. However, if you are in the process of migrating an existing project to use this library or encountering a challenging situation, refer to the custom configuration page to understand how to override or extend the default configurations. Remember, no locked in ❤️✌️.

# Try it 🚀

To test your new TypeScript setup, open a TypeScript file, type invalid code (e.g. import { App } from "./App"), then wait for the IDE to flag the error. Fix the error (e.g. import { App } from "./App.tsx"), then wait for the IDE to remove the error.