diff --git a/docs/packages/Type_Utils.mdx b/docs/packages/Type_Utils.mdx new file mode 100644 index 000000000000..fe5f382255ab --- /dev/null +++ b/docs/packages/Type_Utils.mdx @@ -0,0 +1,20 @@ +--- +id: type-utils +sidebar_label: type-utils +--- + +# `@typescript-eslint/type-utils` + + + +> Type utilities for working with TypeScript within ESLint rules. ✨ + +This package contains public utilities for working with TypeScript types that ESLint rules often use. +Rules declared in [`@typescript-eslint/eslint-plugin`](./ESLint_Plugin.mdx) use these utility functions. + +The utilities in this package are both: + +- More generally ESLint-focused than the broad TypeScript utilities in [`ts-api-utils`](https://npmjs.com/package/ts-api-utils) +- Separated from [`@typescript-eslint/utils`](./Utils.mdx) so that that package does not require a dependency on `typescript` + +> See [Custom Rules](../developers/Custom_Rules.mdx) for documentation on creating your own custom ESLint rules for TypeScript code. diff --git a/packages/type-utils/src/builtinSymbolLikes.ts b/packages/type-utils/src/builtinSymbolLikes.ts index 3443a0d0382e..a2a03a692a26 100644 --- a/packages/type-utils/src/builtinSymbolLikes.ts +++ b/packages/type-utils/src/builtinSymbolLikes.ts @@ -3,18 +3,24 @@ import * as ts from 'typescript'; import { isSymbolFromDefaultLibrary } from './isSymbolFromDefaultLibrary'; /** - * class Foo extends Promise {} - * Foo.reject - * ^ PromiseLike + * @example + * ```ts + * class DerivedClass extends Promise {} + * DerivedClass.reject + * // ^ PromiseLike + * ``` */ export function isPromiseLike(program: ts.Program, type: ts.Type): boolean { return isBuiltinSymbolLike(program, type, 'Promise'); } /** - * const foo = Promise - * foo.reject - * ^ PromiseConstructorLike + * @example + * ```ts + * const value = Promise + * value.reject + * // ^ PromiseConstructorLike + * ``` */ export function isPromiseConstructorLike( program: ts.Program, @@ -24,17 +30,23 @@ export function isPromiseConstructorLike( } /** + * @example + * ```ts * class Foo extends Error {} * new Foo() - * ^ ErrorLike + * // ^ ErrorLike + * ``` */ export function isErrorLike(program: ts.Program, type: ts.Type): boolean { return isBuiltinSymbolLike(program, type, 'Error'); } /** + * @example + * ```ts * type T = Readonly - * ^ ReadonlyErrorLike + * // ^ ReadonlyErrorLike + * ``` */ export function isReadonlyErrorLike( program: ts.Program, @@ -50,8 +62,11 @@ export function isReadonlyErrorLike( } /** + * @example + * ```ts * type T = Readonly<{ foo: 'bar' }> - * ^ ReadonlyTypeLike + * // ^ ReadonlyTypeLike + * ``` */ export function isReadonlyTypeLike( program: ts.Program, diff --git a/packages/website/sidebars/sidebar.base.js b/packages/website/sidebars/sidebar.base.js index 4676e1e43612..02cbad567249 100644 --- a/packages/website/sidebars/sidebar.base.js +++ b/packages/website/sidebars/sidebar.base.js @@ -84,6 +84,7 @@ module.exports = { 'packages/parser', 'packages/rule-tester', 'packages/scope-manager', + 'packages/type-utils', 'packages/typescript-estree', 'packages/typescript-eslint', 'packages/utils',