Skip to content
Back to skills

Type Checker

ASecurity

執行 TypeScript 類型檢查並修復類型錯誤。當遇到類型錯誤、需要類型定義、或用戶提到「type」、「類型」時使用。

  • 207 stars
  • 0 votes
  • 0 copies
  • 6 views
  • Added February 7, 2026
developmenttypescriptbashreactapi

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 9 files and shows the line behind each finding

Scanned February 12, 2026

npx -y skills add NeverSight/skills_feed --skill type-checker --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Type Checker?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Type Checker
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/neversight-type-checker/badge)](https://www.skillsdirectory.com/skills/neversight-type-checker)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: type-checker
description: 執行 TypeScript 類型檢查並修復類型錯誤。當遇到類型錯誤、需要類型定義、或用戶提到「type」、「類型」時使用。
allowed-tools: Read, Grep, Bash, Edit
---

# TypeScript Type Checker Skill

專門處理 TypeScript 類型檢查和類型錯誤修復。

## 🎯 執行時機

- 用戶提到「類型錯誤」、「type error」
- 執行 `npm run typecheck` 發現錯誤
- 需要定義或修復 TypeScript 類型
- 代碼中出現 `any` 需要替換為具體類型

## 📋 執行流程

### 1. 執行類型檢查

```bash
npm run typecheck
```

### 2. 分析錯誤輸出

TypeScript 錯誤格式:

```
src/components/Login.tsx:42:15 - error TS7006: Parameter 'user' implicitly has an 'any' type.
```

需要提取:

- 檔案路徑: `src/components/Login.tsx`
- 行號: `42`
- 錯誤碼: `TS7006`
- 錯誤訊息: `Parameter 'user' implicitly has an 'any' type`

### 3. 閱讀相關檔案

**必須閱讀的檔案(按順序):**

1. **錯誤所在檔案** - 理解上下文
2. **相關類型定義檔案** - 檢查是否已有類型定義
   ```bash
   # 搜尋類型定義檔案
   Glob: pattern="**/types/**/*.ts"
   Glob: pattern="**/*.d.ts"
   ```
3. **相關的 interface/type** - 尋找可重用的類型
   ```bash
   # 在檔案中搜尋 interface 定義
   Grep: pattern="^(export\\s+)?(interface|type)\\s+" output_mode="content"
   ```

### 4. 修復策略

#### 策略 A: 使用現有類型

```typescript
// ❌ 錯誤
function handleUser(user: any) {}

// ✅ 使用專案中已定義的類型
import { User } from "@/types/user";
function handleUser(user: User) {}
```

#### 策略 B: 定義新類型

如果專案中沒有合適的類型,在適當位置定義:

```typescript
// 在 src/types/[domain].ts 中定義
export interface UserProfile {
  id: string;
  name: string;
  email: string;
  role: "admin" | "user" | "guest";
}
```

#### 策略 C: 使用泛型

```typescript
// ❌ 錯誤
function fetchData(url: string): Promise<any> {}

// ✅ 使用泛型
function fetchData<T>(url: string): Promise<T> {}
```

### 5. 常見類型錯誤修復

#### TS7006: 隱式 any 參數

```typescript
// ❌ 錯誤
const handleClick = (e) => {};

// ✅ 修復
const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {};
```

#### TS2339: 屬性不存在

```typescript
// ❌ 錯誤
interface User {
  name: string;
}
user.email; // Property 'email' does not exist

// ✅ 修復:擴展 interface
interface User {
  name: string;
  email: string;
}
```

#### TS2345: 參數類型不匹配

```typescript
// ❌ 錯誤
function greet(name: string) {}
greet(123);

// ✅ 修復:確保參數類型正確
greet(String(123));
// 或
greet(userId.toString());
```

#### TS18046: 可能為 undefined

```typescript
// ❌ 錯誤
const user = users.find((u) => u.id === id);
console.log(user.name); // 'user' is possibly 'undefined'

// ✅ 修復:加入 null check
const user = users.find((u) => u.id === id);
if (user) {
  console.log(user.name);
}
// 或使用可選鏈
console.log(user?.name);
```

### 6. React 特定類型

```typescript
// Props 類型
interface ButtonProps {
  label: string;
  onClick: () => void;
  disabled?: boolean;
}

// Event handlers
const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {};
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {};
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {};

// State 類型
const [user, setUser] = useState<User | null>(null);
const [items, setItems] = useState<Item[]>([]);

// Ref 類型
const inputRef = useRef<HTMLInputElement>(null);
```

## 📋 修復流程

1. **Read 錯誤檔案**
2. **Grep 搜尋相關類型定義**
3. **決定修復策略**(使用現有/定義新/使用泛型)
4. **Edit 修復類型錯誤**
5. **Bash 執行 `npm run typecheck` 驗證**
6. **重複直到所有錯誤修復**

## 🚨 絕對禁止

```typescript
// ❌ 永遠不要這樣做
const data: any = fetchData();
function process(input: any): any {}
// @ts-ignore
const result = riskyOperation();
```

## ✅ 最佳實踐

1. **優先使用現有類型** - 檢查 `src/types/` 目錄
2. **類型定義集中管理** - 放在 `src/types/[domain].ts`
3. **使用嚴格模式** - 確保 tsconfig.json 開啟 strict
4. **Export 可重用類型** - 方便其他檔案使用
5. **使用 Type Guards** - 提供 runtime 類型安全

## 📝 回報格式

````markdown
## TypeScript 類型修復報告

### 修復的錯誤

1. **src/components/Login.tsx:42**
   - 錯誤: TS7006 - Parameter 'user' implicitly has an 'any' type
   - 修復: 使用 `User` interface from `@/types/user`
   - 狀態: ✅ 已修復

2. **src/api/auth.ts:15**
   - 錯誤: TS2345 - Argument type mismatch
   - 修復: 調整參數類型為 `LoginCredentials`
   - 狀態: ✅ 已修復

### 驗證結果

```bash
npm run typecheck
```
````

✅ 無類型錯誤

### 新增的類型定義

- `src/types/auth.ts` - LoginCredentials, AuthResponse

```

## 🔗 參考資源

- TypeScript 官方文檔: https://www.typescriptlang.org/docs/
- React TypeScript Cheatsheet: https://react-typescript-cheatsheet.netlify.app/
- 專案規範: `/home/user/maihouses/CLAUDE.md`
```

Files in this skill

  • SKILL.md5.1 KB
  • description_cn.txt152 B
  • description_de.txt146 B
  • description_en.txt152 B
  • description_es.txt160 B
  • description_fr.txt149 B
  • description_ja.txt75 B
  • description_ko.txt150 B
  • description_tw.txt152 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…