本文へ移動
cccskills
無料GitHub で公開

typescript-advanced

Advanced TypeScript patterns and type safety as used in this portfolio

インストール方法を見る

含まれるファイル(1)

  • SKILL.md2.7 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Advanced TypeScript Skill

Advanced TypeScript patterns, generics, and type-level programming as applied in the PP Namias portfolio.

When to use this skill

  • Creating complex type definitions for Sanity schemas or API responses
  • Implementing type-safe patterns for SWR hooks or context providers
  • Building generic utilities for the codebase
  • Enhancing type safety in existing code

Portfolio-specific patterns

1. Sanity document types

// Typed Sanity query results
const doc = await querySanity<{
  title?: string;
  slug?: string;
  technologies?: string[];
  galleryItems?: Array<{
    url?: string;
    alt?: string;
    caption?: string;
  }>;
}>(`*[_type == "project" && slug.current == "${safeSlug}"][0]{...}`);

2. SWR hook typing

// Typed SWR fetcher
const { data, error } = useSWR<CmsContent>(
  '/api/cms',
  (url) => fetch(url).then(r => r.json())
);

3. API route request/response types

// Typed API response
interface ApiResponse<T> {
  data?: T;
  error?: string;
  status: number;
}

// Typed request body
interface ChatRequest {
  message: string;
  history?: Array<{ role: string; content: string }>;
}

4. Component prop types

// Discriminated union for component variants
type ProjectTier = 'standard' | 'featured' | 'showcase';

interface ProjectProps {
  tier: ProjectTier;
  title: string;
  slug: string;
}

// Only showcase has galleryItems
interface ShowcaseProject extends ProjectProps {
  tier: 'showcase';
  galleryItems: GalleryItem[];
}

type ProjectCardProps = StandardProject | FeaturedProject | ShowcaseProject;

Common patterns

Discriminated Unions

type Result<T> =
  | { success: true; data: T }
  | { success: false; error: string };

Template Literal Types

type SanityField = `${string}Field`;
const title: SanityField = 'titleField'; // Valid

Type Guards

function isShowcaseProject(project: ProjectCardProps): project is ShowcaseProject {
  return project.tier === 'showcase';
}

Branded Types

type Slug = string & { readonly __brand: 'Slug' };
function createSlug(value: string): Slug {
  return value.replace(/[^a-zA-Z0-9\-_]/g, '') as Slug;
}

Mapped Types

type Optional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;

Checklist

  • Types match actual data shapes (Sanity schema, API responses)
  • Type guards used for runtime type narrowing
  • No as any or @ts-ignore unless absolutely necessary
  • Types exported for reuse across files
  • npx tsc --noEmit passes

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Audit and fix accessibility issues across the portfolio to ensure WCAG 2.1 AA compliance.

日本語の概要は準備中です。原文の説明を表示しています。

PP-Namias/Portfolio22026年10月7日 更新

Creates a new blog post document in the Sanity studio. Use when the user wants to write a blog post, publish an article, or schedule a future post.

日本語の概要は準備中です。原文の説明を表示しています。

PP-Namias/Portfolio22026年10月7日 更新

Creates a new certification document in the Sanity studio. Use when the user wants to add a credential, certificate, or professional accreditation to the Certifications collection.

日本語の概要は準備中です。原文の説明を表示しています。

PP-Namias/Portfolio22026年10月7日 更新

Adds a new skill MD file to the studio's skills collection. Use when the user wants to author a new step-by-step recipe for the studio's in-app Skills tool or the .agents mirror.

日本語の概要は準備中です。原文の説明を表示しています。

PP-Namias/Portfolio22026年10月7日 更新

Creates a new project document in the Sanity studio. Use when the user wants to add a new portfolio project, a case study, or a work sample to the Projects collection.

日本語の概要は準備中です。原文の説明を表示しています。

PP-Namias/Portfolio22026年10月7日 更新

Creates a new experience document in the Sanity studio. Use when the user wants to add a job, role, internship, or work history entry to the Experience collection.

日本語の概要は準備中です。原文の説明を表示しています。

PP-Namias/Portfolio22026年10月7日 更新

PP-Namias のスキルをすべて見る

このスキルの問題を報告する