I already had a library that I wanted to convert to Typescript. I picked Rollup.js to do my build process.

First I installed the following packages:

> npm i -E -D rollup typescript @rollup/plugin-commonjs\
  @rollup/plugin-node-resolve rollup-plugin-typescript2\

I ended up with:

* [email protected]
* [email protected]
* [email protected]
* [email protected]
* @rollup/[email protected]
* @rollup/[email protected]

Then I created a tsconfig.json:

  "compilerOptions": {
    "outDir": "build",
    "module": "esnext",
    "target": "es5",
    "lib": ["es6", "dom", "es2016", "es2017"],
    "sourceMap": true,
    "allowJs": false,
    "declaration": true,
    "moduleResolution": "node",
    "forceConsistentCasingInFileNames": true,
    "noImplicitReturns": true,
    "noImplicitThis": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "suppressImplicitAnyIndexErrors": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true
  "include": ["src"],
  "exclude": ["node_modules", "build"]

Also a rollup.config.js:

import typescript from "rollup-plugin-typescript2";
import external from "rollup-plugin-peer-deps-external";
import commonjs from "@rollup/plugin-commonjs";
import resolve from "@rollup/plugin-node-resolve";

import pkg from "./package.json";

export default {
  input: "src/index.ts",
  output: [
      file: pkg.main,
      format: "cjs",
      exports: "named",
      sourcemap: true,
      file: pkg.module,
      format: "es",
      exports: "named",
      sourcemap: true,
  plugins: [
      rollupCommonJSResolveHack: true,
      exclude: "**/__tests__/**",
      clean: true,
      include: ["node_modules/**"],

Modified my package.json:

  "main": "build/index.js",
  "module": "build/index.es.js",
  "jsnext:main": "build/index.es.js",
  "files": ["build"],
  "scripts": {
    "build": "rollup -c",

Finally I created a dummy index.ts for testing:

function index() {
  console.log("hello world");

And ran:

> npm run build


I had to update eslint packages:

npm i -E -D @typescript-eslint/parser @typescript-eslint/eslint-plugin

Ended up with:

* @typescript-eslint/[email protected]
* @typescript-eslint/[email protected]

And then modified my .eslintrc.js:

parser: '@typescript-eslint/parser',
  extends: [
  plugins: ['@typescript-eslint'],

You can see the resulting branch here:


Thanks for reading!