tsdoc-require-2/required-tags
Rule catalog ID: R100
Targeted pattern scopeâ
This page documents the required-tag rule family (require-*).
Each require-* rule checks declarations that already have TSDoc and reports when its specific tag is missing.
Examples:
tsdoc-require-2/require-paramrequires@paramtsdoc-require-2/require-returnsrequires@returnstsdoc-require-2/require-remarksrequires@remarks
What this rule reportsâ
For each enabled require-* rule, reports declarations where:
- a TSDoc block exists, and
- the required tag for that rule does not appear in the block.
Like tsdoc-require-2/require, required-tag rules support declaration targeting (enforceFor) and export scope (exportMode / includeNonExported).
Why this rule existsâ
Comment presence alone does not guarantee useful docs.
Required-tag rules let you enforce documentation contracts such as:
- every documented function has
@param/@returns - every package entry has
@packageDocumentation - every declaration includes
@remarksfor implementation context
Together, these rules turn documentation from optional prose into a consistent API contract.
â Incorrectâ
/**
* Creates a user record.
*/
export function createUser(name: string): string {
return name;
}
With:
["error", { enforceFor: ["function"] }];
for tsdoc-require-2/require-param and tsdoc-require-2/require-returns.
â Correctâ
/**
* Creates a user record.
*
* @param name - User display name.
*
* @returns Persisted user ID.
*/
export function createUser(name: string): string {
return name;
}
Behavior and migration notesâ
- No single runtime rule key named
tsdoc-require-2/required-tagsexists; enable individualrequire-*rules. - Required-tag rules only validate comments that exist. Pair them with
tsdoc-require-2/require. - If you also enable
tsdoc-require-2/restrict-tagsinallowmode, include all required tags in the allow-list to avoid policy conflicts. - Keep
enforceForandexportModealigned acrossrequire,require-*, andrestrict-tagsfor predictable results.
Additional examplesâ
Shared optionsâ
Each require-* rule accepts the same option shape:
type Options = [
{
enforceFor?: Array<
| "class"
| "enum"
| "function"
| "interface"
| "namespace"
| "object"
| "type"
| "variable"
>;
exportMode?: "all" | "exported" | "non-exported";
includeNonExported?: boolean;
},
];
Default options:
[
{
enforceFor: [
"class",
"enum",
"function",
"interface",
"namespace",
"object",
"type",
"variable",
],
exportMode: "exported",
},
];
Rules in this familyâ
tsdoc-require-2/require-abstracttsdoc-require-2/require-alphatsdoc-require-2/require-authortsdoc-require-2/require-betatsdoc-require-2/require-categorytsdoc-require-2/require-classtsdoc-require-2/require-decoratortsdoc-require-2/require-default-valuetsdoc-require-2/require-deprecatedtsdoc-require-2/require-documenttsdoc-require-2/require-enumtsdoc-require-2/require-eventtsdoc-require-2/require-event-propertytsdoc-require-2/require-exampletsdoc-require-2/require-expandtsdoc-require-2/require-experimentaltsdoc-require-2/require-functiontsdoc-require-2/require-grouptsdoc-require-2/require-hiddentsdoc-require-2/require-hideconstructortsdoc-require-2/require-ignoretsdoc-require-2/require-importtsdoc-require-2/require-includetsdoc-require-2/require-inherit-doctsdoc-require-2/require-inlinetsdoc-require-2/require-interfacetsdoc-require-2/require-internaltsdoc-require-2/require-labeltsdoc-require-2/require-licensetsdoc-require-2/require-linktsdoc-require-2/require-merge-module-withtsdoc-require-2/require-moduletsdoc-require-2/require-namespacetsdoc-require-2/require-overloadtsdoc-require-2/require-overridetsdoc-require-2/require-package-documentationtsdoc-require-2/require-paramtsdoc-require-2/require-primary-exporttsdoc-require-2/require-privatetsdoc-require-2/require-private-remarkstsdoc-require-2/require-propertytsdoc-require-2/require-protectedtsdoc-require-2/require-publictsdoc-require-2/require-readonlytsdoc-require-2/require-remarkstsdoc-require-2/require-returnstsdoc-require-2/require-sealedtsdoc-require-2/require-seetsdoc-require-2/require-sincetsdoc-require-2/require-sort-strategytsdoc-require-2/require-summarytsdoc-require-2/require-templatetsdoc-require-2/require-throwstsdoc-require-2/require-type-paramtsdoc-require-2/require-use-declared-typetsdoc-require-2/require-virtual
ESLint flat config exampleâ
import tsdocRequire from "eslint-plugin-tsdoc-require-2";
export default [
tsdocRequire.configs.recommended,
{
rules: {
"tsdoc-require-2/require-param": ["error", { enforceFor: ["function"] }],
"tsdoc-require-2/require-returns": ["error", { enforceFor: ["function"] }],
"tsdoc-require-2/require-throws": ["error", { enforceFor: ["function"] }],
},
},
];
When not to use itâ
If your team prefers free-form narrative comments and does not want tag-level structure, required-tag rules may add noise.
In that case, keep tsdoc-require-2/require enabled and only add the strict tag rules that provide clear value.