typescript/prefer-named-tuple-members
Prefer explicit names for tuple members in TypeScript tuple types.
Targeted pattern scope
This rule targets tuple type members that are not named:
- standard tuple members (for example
[string, number]) - optional tuple members (for example
[string?]) - rest tuple members (for example
[...string[]])
It does not report tuples where all members are already named.
What this rule reports
This rule reports tuple types that contain one or more unnamed members.
Why this rule exists
Named tuple members improve readability and API clarity, especially when tuple positions have semantic meaning.
❌ Incorrect
type RGB = [number, number, number];
type Pair = [id: string, number?];
type Params = [...string[]];
✅ Correct
type RGB = [red: number, green: number, blue: number];
type Pair = [id: string, value?: number];
type Params = [...rest: string[]];
Behavior and migration notes
This rule is autofixable and also provides suggestions.
For unnamed members, the fixer generates deterministic placeholder names:
item1,item2,item3, ...- optional members become
itemN?: Type - rest members become
...itemN: Type[]
You can keep the generated names or refine them to domain-specific names.
Options
This rule has no options.
Additional examples
type Point = [number, number];
// ❌ reported
type Point = [x: number, y: number];
// ✅ valid
ESLint flat config example
import etcMisc from "eslint-plugin-etc-misc";
export default [
{
plugins: { "etc-misc": etcMisc },
rules: {
"etc-misc/typescript/prefer-named-tuple-members": "warn",
},
},
];
When not to use it
Disable this rule if your team intentionally prefers positional tuples without member names.
Package documentation
Rule catalog ID: R106
Further reading
Adoption resources
- Start at warning level in CI, then move to error after cleanup.
- Use focused codemods/autofix batches per package or directory.