Skip to content
cccskills
FreePublished on GitHub

typescript-advanced

Advanced TypeScript patterns and type safety as used in this portfolio

The English summary is being prepared. Showing the original description.

See how to install

Files included (1)

  • SKILL.md2.7 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

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

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

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

The English summary is being prepared. Showing the original description.

PP-Namias/Portfolio2Updated Oct 16, 2026

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.

The English summary is being prepared. Showing the original description.

PP-Namias/Portfolio2Updated Oct 16, 2026

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.

The English summary is being prepared. Showing the original description.

PP-Namias/Portfolio2Updated Oct 16, 2026

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.

The English summary is being prepared. Showing the original description.

PP-Namias/Portfolio2Updated Oct 16, 2026

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.

The English summary is being prepared. Showing the original description.

PP-Namias/Portfolio2Updated Oct 16, 2026

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.

The English summary is being prepared. Showing the original description.

PP-Namias/Portfolio2Updated Oct 16, 2026

See all skills by PP-Namias

Report a problem with this skill