code-quality
Expert at TypeScript strict mode, linting, formatting, code review standards. Use when checking code quality, fixing type errors, or enforcing standards.
安装与使用
请根据来源仓库和你的 AI 工具说明安装此技能。先阅读技能文件和依赖要求,再添加到工作流。
查看来源 ↗使用指南技能说明
Code Quality Specialist
You are an expert at maintaining high code quality in TypeScript/React projects.
When To Use
Claude should automatically use this skill when:
- User asks to check or improve code quality
- Fixing TypeScript errors or warnings
- Reviewing code for best practices
- Enforcing consistent patterns
TypeScript Standards
Strict Mode Requirements
-
strict: truein tsconfig.json - No
anytypes (useunknowninstead) - Explicit return types on exported functions
- Null checks with optional chaining
Type Safety Patterns
// Good - explicit types
function processData(data: UserData): ProcessedResult {
return { ... };
}
// Bad - implicit any
function processData(data) {
return { ... };
}
// Good - null handling
const value = obj?.property ?? defaultValue;
// Bad - unchecked access
const value = obj.property;
Code Patterns
Component Structure
// Props interface above component
interface ComponentNameProps {
/** Description of prop */
propName: string;
/** Optional prop with default */
optional?: boolean;
}
// Explicit function component
export function ComponentName({ propName, optional = false }: ComponentNameProps) {
// Hooks first
const [state, setState] = useState<StateType>(initial);
// Derived values
const derived = useMemo(() => compute(state), [state]);
// Callbacks
const handleClick = useCallback(() => {
// ...
}, [dependencies]);
// Render
return <div>...</div>;
}
Hook Structure
interface UseHookNameOptions {
/** Required option */
required: string;
/** Optional with default */
optional?: number;
}
interface UseHookNameReturn {
/** Current state */
value: string;
/** Update function */
setValue: (value: string) => void;
}
export function useHookName(options: UseHookNameOptions): UseHookNameReturn {
const { required, optional = 10 } = options;
// ...
}
Quality Checks
Type Check
pnpm tsc --noEmit
Common Issues
| Issue | Fix |
|---|---|
Type 'X' is not assignable to type 'Y' |
Check type compatibility, add type guard |
Object is possibly 'undefined' |
Add null check or optional chaining |
Parameter 'x' implicitly has an 'any' type |
Add explicit type annotation |
Property 'x' does not exist on type 'Y' |
Add property to interface or use type assertion |
Anti-Patterns to Avoid
Don't Do
// Type assertions to escape type system
const value = data as any;
// Ignoring errors
// @ts-ignore
const broken = thing.property;
// Unused variables
const unused = 'never used';
// Console logs in production
console.log('debug');
Do Instead
// Type guards for runtime checks
function isValidData(data: unknown): data is ValidData {
return typeof data === 'object' && data !== null && 'id' in data;
}
// Explicit error handling
if (!data) {
throw new Error('Data is required');
}
// Remove unused code
// Delete it entirely
// Use proper logging
if (process.env.NODE_ENV === 'development') {
console.log('debug');
}
Project-Specific Rules
Platform Abstraction
- All platform code goes through
getPlatformAdapter() - Never import platform-specific modules directly
- Use
isNative(),isTauri(),isCapacitor()for checks
Component Rules
- Every component needs a Storybook story
- Props must have TSDoc comments
- Use
useCallbackfor event handlers passed to children - Use
useMemofor expensive computations
Hook Rules
- Hooks must return typed objects
- Include TSDoc with @example
- Handle loading, error, and success states
- Clean up subscriptions in useEffect return
Review Checklist
When reviewing code:
- No TypeScript errors (
pnpm tsc --noEmit) - No
anytypes - All exports have TSDoc
- Consistent naming (PascalCase components, camelCase functions)
- Error handling present
- No console.logs
- Tests written or updated
- Storybook stories for components
使用示例
查看来源仓库中的使用示例与配置说明。
查看来源 ↗来源历史
- 收录时间
- 2026-01-20
- 索引更新时间
- 2026-01-28
- Branch
- main
收录与同步日期属于本站记录。源码修改历史请查看来源仓库。
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!