Use predictable file names
LOW1.0.0
When to apply Before creating, renaming, or reviewing TypeScript source files, including components, hooks, tests, and generated files.
Name authored source files in lowercase kebab-case after the concept they contain, and add only the project's known dot suffixes before the extension.
Implementation
- Use names such as
item-explorer.tsx,use-click-outside.ts, andquery-keys.ts. - Name a component file after the component instead of hiding it in
index.tsx; keepindexfiles for documented package entry points and framework routes. - Use
.tsxonly for files that contain JSX. - Use dot suffixes only for roles the project recognizes, such as
.test,.mock,.generated,.config, and.d. - Keep file names a framework requires, such as route files, and leave generated and vendored files as their tools name them.
- Enforce the convention with a file-name lint check, and keep its exception list in sync with framework needs.
This is a consistency convention; kebab-case is one common choice.
Rationale
A predictable name lets people and tools find a file from what it contains.
Lowercase names avoid bugs where a file named Button.tsx is imported as ./button and works on case-insensitive file systems but fails in case-sensitive CI.
Many files named index.tsx make editor tabs and search results indistinguishable.
Examples
Incorrect (counterexample):
ItemExplorer.tsx
itemExplorer.tsx
components/Explorer/index.tsx
query_keys.test.ts
Correct:
item-explorer.tsx
item-explorer.test.tsx
query-keys.test.ts
Validation
Run the project's file-name check after adding or renaming files.
A file name required by a framework or generated by a tool is not a violation.