A Biome linter plugin that disallows type assertions in TypeScript code, encouraging the use of type guards and proper typing instead.
Install the plugin as a dev dependency:
npm install --save-dev biome-plugin-no-type-assertionor with your preferred package manager:
yarn add -D biome-plugin-no-type-assertion
pnpm add -D biome-plugin-no-type-assertion
bun add -D biome-plugin-no-type-assertionAdd the plugin to your Biome configuration file (biome.json or biome.jsonc):
To ignore it
// biome-ignore lint/plugin/no-type-assertion: <reason>
const a = 5 as number;The plugin will now check your TypeScript code and report errors when it detects type assertions.
The plugin detects only one form of type assertions in TypeScript (the most used):
as syntax: expression as Type
const a = 5 as number; // ❌ Error
const b = ["nope"] as string[]; // ❌ ErrorUnfortunately, due to limitations in the Grit pattern language, the plugin cannot currently detect type assertions using the angle-bracket syntax. Examples of unsupported cases include:
// These are "uncommon" type assertions that the plugin at the moment cannot catch
const b = <number>5;
console.log(<string>(<unknown>b));Type assertions bypass TypeScript's type checker and can hide potential bugs. Instead, consider:
- Type guards: Use runtime checks with type predicates
- Proper typing: Define correct types at the source
- Type narrowing: Let TypeScript infer types through control flow analysis
Contributions are welcome! Here's how to get started:
-
Clone the repository:
git clone https://github.com/albertodeago/biome-plugin-no-type-assertion.git cd biome-plugin-no-type-assertion -
Install dependencies:
npm install
The plugin is defined in no-type-assertion.grit using the Grit pattern language.
Run the test suite:
npm testTests are located in the test directory and use Vitest. Test fixtures can be found in test/fixtures.
To publish a new version of the plugin:
- Update the version in
package.json. - Publish to npm:
npm publish
- Tag the release in GitHub creating a Release with the changes.
MIT © Alberto De Agostini
{ "$schema": "./node_modules/@biomejs/biome/configuration_schema.json", "plugins": ["node_modules/biome-plugin-no-type-assertion/no-type-assertion.grit"] }