- Optionally use typescript to improve tooling, linting, and documentation generation
- Export Typescript type declarations to improve your downstream development experience
- Backwards compatibility for Node.js-style (CommonJS) imports
- Both strict and flexible Typescript configurations available
So we can have nice things:
- Generate API documentation (HTML or JSON) without a mess of JSDoc tags to maintain
- Collocated, atomic, concurrent unit tests with AVA
- Source-mapped code coverage reports with nyc
- Configurable code coverage testing (for continuous integration)
To see how this starter can be used, check out the
To start working, run:
$ yarn watch
which will build and watch the entire project for changes (to both the library source files and test source files). As you develop, you can add tests for new functionality – which will initially fail – before developing the new functionality. Each time you save, any changes will be rebuilt and retested.
Typescript builds on the left, tests run on the right:
Since only changed files are rebuilt and retested, this workflow remains fast even for large projects.
Enable stronger type checking (recommended)
To make getting started easier, the default
tsconfig.json is using the
config/tsconfig.flexible configuration. This will allow you to get started without many warnings from Typescript.
To enable additional Typescript type checking features (a good idea for mission-critical or large projects), change the
extends value in
View test coverage
To generate and view test coverage, run:
$ yarn cov
This will create an HTML report of test coverage – source-mapped back to Typescript – and open it in your default browser.
Generate your API docs
The src folder is analyzed and documentation is automatically generated using typedoc.
$ yarn docs
This command generates API documentation for your library in HTML format.
Since types are tracked by Typescript, there's no need to indicate types in JSDoc format. For more information, see the typedoc documentation.
$ yarn docs:json
Generate/update changelog & release
# bump package.json version, update CHANGELOG.md, git tag the release $ yarn release # Release without bumping package.json version $ yarn release -- --first-release # PGP sign the release $ yarn release -- --sign
All package scripts
You can run the
info script for information on each available package script.
$ yarn run info info: Display information about the scripts build: (Trash and re)build the library lint: Lint all typescript source files unit: Run unit tests test: Lint and test the library watch: Watch source files, rebuild library on changes, rerun relevant tests watch:build: Watch source files, rebuild library on changes watch:unit: Watch the build, rerun relevant tests on changes cov: Run tests, generate the HTML coverage report, and open it in a browser html-coverage: Output HTML test coverage report send-coverage: Output lcov test coverage report and send it to codecov docs: Generate API documentation and open it in a browser docs:json: Generate API documentation in typedoc JSON format release: Bump package.json version, update CHANGELOG.md, tag a release
This starter currently does not run tests in a browser (AVA tests in Node exclusively). While the current testing system will be sufficient for most use cases, some projects will (also) need to implement a browser-based testing system like karma-ava. (Pull requests welcome!)
By default, this project requires tslib as a dependency. This is the recommended way to use Typescript's es6 & es7 transpiling for sizable projects, but you can remove this dependency by removing the
importHelpers compiler option in
tsconfig.json. Depending on your usage, this may increase the size of your library significantly, as the Typescript compiler will inject it's helper functions directly into every file which uses them. (See also:
Targeting older environments
By default, this library targets environments with native (or already-polyfilled) support for es6 features. If your library needs to target Internet Explorer, outdated Android browsers, or versions of Node older than v4, you may need to change the
es5 (rather than
es6) and bring in a Promise polyfill (such as es6-promise).
It's a good idea to maintain 100% unit test coverage, and always test in the environments you target.