Note
This repository uses the Aspect CLI for CI and local development. See the docs and install instructions to get started.
This is the canonical ruleset for using Bazel with TypeScript, based on https://github.com/aspect-build/rules_js.
Many companies are successfully building with rules_ts. If you're getting value from the project, please let us know! Just comment on our Adoption Discussion.
rules_ts is just a part of what Aspect provides:
- Need help? This ruleset has support provided by https://aspect.build/services.
- See our other Bazel rules, especially those built for rules_js, linked from https://github.com/aspect-build
Follow instructions from the release you wish to use: https://github.com/aspect-build/rules_ts/releases
There are a number of examples in the examples/ folder and larger examples in the bazel-examples repository using rules_ts such as jest, react, angular.
If you'd like an example added, you can fund a Feature Request.
See the API documentation in the docs/ folder.
The most common use is with the ts_project macro which invokes a
transpiler you configure to transform source files like .ts files into outputs such as .js and .js.map,
and the tsc CLI to type-check
the program and produce .d.ts files.
Many organizations set default values, so it's common to write a macro to wrap ts_project, then
ensure that your developers load your macro rather than loading from @aspect_rules_ts directly.
Aspect provides a TypeScript BUILD file generator as part of the Aspect CLI.
Run aspect configure to create or update BUILD.bazel files as you edit TypeScript sources.
See https://docs.aspect.build/cli/commands/aspect_configure.
If you know how to write Bazel rules, you might find that ts_project doesn't do what you want.
One way to customize it is to peel off one layer of indirection, by calling the ts_project_rule
directly. This bypasses our default setting logic, and also the validation program which checks that
ts_project attributes are well-formed.
You can also write a custom rule from scratch. We expose helper functions from /ts/private in this repo. Be aware that these are not a public API, so you may have to account for breaking changes which aren't subject to our usual semver policy.
This ruleset collects limited usage data via tools_telemetry, which is reported to Aspect Build Inc and governed by our privacy policy.