mcpField
T
typescript-skills

typescript-skills

github.com/llama-farm開発83681 回インストール21 週間前に更新
リポジトリ

typescript-skills について

LlamaFarm の React Designer と Electron アプリ向けの共通 TypeScript ガイドです。厳密な型付け、実装パターン、テスト、セキュリティの実践を扱います。

主な機能

  1. 01厳密な型付けと null 安全性
  2. 02インターフェースと明示的な戻り値型
  3. 03React と TanStack Query のパターン
  4. 04テストとセキュリティの指針

活用シーン

  1. 01サブシステム間で TypeScript の実践を統一
  2. 02アプリコードの型と null 処理を確認
  3. 03React コンポーネントとクエリフックを作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/llama-farm/llamafarm --skill typescript-skills

インストール後、Claude Code で/typescript-skillsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

patterns.md
security.md
testing.md
typing.md

詳細

LlamaFarm 向け TypeScript スキル

Designer(React)と Electron App のサブシステムで共通して使える、TypeScript のベストプラクティスです。

概要

このスキルでは、LlamaFarm のフロントエンドアプリケーション向けに、慣用的な TypeScript のパターンを解説します。

  • designer/:React 18 + TanStack Query + TailwindCSS + Radix UI
  • electron-app/:Electron 28 + Electron Vite

技術スタック

サブシステムフレームワークビルド主なライブラリ
designerReact 18ViteTanStack Query, Radix UI, axios, react-router-dom
electron-appElectron 28electron-viteelectron-updater, axios

設定

両方のプロジェクトで、厳格な TypeScript を使用しています。

{
  "strict": true,
  "noUnusedLocals": true,
  "noUnusedParameters": true,
  "noFallthroughCasesInSwitch": true
}

基本原則

  1. 常に strict モードを有効にする - 明示的な正当化なしに any を使用しない
  2. interface を優先する - オブジェクトの形状には interface、ユニオン/交差型には type を使用する
  3. 戻り値の型を明示する - 公開関数の戻り値には必ず型を指定する
  4. 不変性 - 適用できる箇所では readonly と as const を使用する
  5. null 安全性 - null/undefined を明示的に処理し、非 null アサーションを避ける

関連ドキュメント

  • patterns.md - 慣用的な TypeScript パターン
  • typing.md - 厳密な型付け、ジェネリクス、ユーティリティ型
  • testing.md - Vitest とテストのパターン
  • security.md - XSS の防止、入力検証

クイックリファレンス

React コンポーネントのパターン
interface Props {
  readonly title: string
  readonly onAction?: () => void
}

function MyComponent({ title, onAction }: Props): JSX.Element {
  return <button onClick={onAction}>{title}</button>
}
TanStack Query フックのパターン
export const projectKeys = {
  all: ['projects'] as const,
  lists: () => [...projectKeys.all, 'list'] as const,
  detail: (id: string) => [...projectKeys.all, 'detail', id] as const,
}

export function useProject(id: string) {
  return useQuery({
    queryKey: projectKeys.detail(id),
    queryFn: () => fetchProject(id),
    enabled: !!id,
  })
}
エラークラスのパターン
export class ApiError extends Error {
  constructor(
    message: string,
    public readonly status: number,
    public readonly response?: unknown
  ) {
    super(message)
    this.name = 'ApiError'
  }
}

チェックリストの概要

カテゴリ重大高中低
型付け3421
パターン2332
テスト2321
セキュリティ4210

コメント