Correction d'erreurs d'interface

VérifiéPrudence

Corrige les erreurs de compilation dans les fichiers d'interface et de contrôleur selon les conventions de code.

Spar Skills Guide Bot
DeveloppementIntermédiaire
23/07/2026
Claude Code
#typescript#nestjs#typia#interfaces#type-errors

Recommandé pour

Synthèse automatique

Corrige les erreurs de compilation TypeScript dans les fichiers d'interface et de contrôleur d'un projet NestJS en appliquant les conventions typia du projet jusqu'à ce que le build passe.

Points forts

  • Boucle build → corriger → rebuild explicite, avec arrêt uniquement à zéro erreur
  • Conventions précises et copiables : ICreate, IUpdate, ISummary, IRequest, tags typia (uuid, email, uri, date-time, Minimum/Maximum)
  • Interdit explicitement `as` et `any`, ce qui force une vraie définition des types
  • Liste les exceptions intentionnelles à ne pas toucher (console.log/console.error dans les catch) et corrige les segments de route redondants

Limites

  • Fortement couplé à une stack précise (NestJS + Prisma + typia) et à un script `npm run build:main` propre au projet
  • Ne couvre que les erreurs d'interface et de contrôleur, pas les autres erreurs de compilation
  • Suppose que le schéma Prisma est la source de vérité pour remplir les interfaces vides
Quand l'utiliser

À utiliser quand `npm run build:main` échoue sur des interfaces vides, des types nullables ou des tags typia manquants dans les fichiers d'interface et de contrôleur.

Quand l'éviter

Ne pas l'utiliser pour des erreurs de compilation hors interfaces/contrôleurs, ni sur un projet qui n'utilise ni typia ni les conventions décrites ici.

Analyse de sécurité

Prudence
Score qualité78/100

Nothing malicious: no curl|sh, no secret/credential exfiltration, no obfuscated payloads, no safety-disabling instructions, and the build loop is a normal TypeScript workflow. Risk comes from the powerful toolset (shell + write) combined with a heuristic that renames files, moves directories and rewrites test paths, which can cause unintended edits if the agent overreaches. Treat as caution rather than risky.

Points d'attention
  • •Grants Bash, Edit, and Write, so the agent can execute arbitrary shell commands and rewrite source files; the only command explicitly given (`npm run build:main`) runs whatever script lives in package.json, which is an inherited supply-chain risk.
  • •Step 3 instructs renaming controller classes, files, directories and test paths based on path-deduplication heuristics - a broad refactor that goes well beyond fixing compilation errors and can silently break routing/tests.
  • •No confirmation/scope guard before multi-file edits, and no instruction to avoid destructive git or file operations (e.g. no 'do not delete files' clause).
Comment cette analyse est faite

Exemples

Fix empty interface build error
`npm run build:main` fails with "Property 'name' does not exist on type '{}'". Fill the empty IEntity interface from the Prisma schema and re-run the build until it passes.
Add typia tags
Fix the type error where a plain string is assigned to `string & Format<"uuid">` in the controller — add the correct typia tags to the interface instead of using `as`.
Fix redundant route path
The controller route is /user/users which repeats the word — fix the redundant path segment in the controller and verify the build still passes.

name: fix-interface description: Fix Interface and Controller compilation errors allowed-tools: Read, Edit, Write, Bash, Grep, Glob

Fix Interface Errors

Fix interface and controller compilation errors according to code conventions.

FORBIDDEN

NEVER use:

  • as keyword (type assertion)
  • any type

Fix type issues by properly defining interfaces.

DO NOT MODIFY

Leave as-is:

  • console.log in Controller catch blocks
  • console.error in Controller catch blocks

These are intentional and should not be changed to NestJS Logger.


Purpose

Fix compilation errors in interface and controller files to ensure npm run build:main passes.

Workflow

┌─────────────────────────────────────┐
│  Step 1: Run Build                  │
│  npm run build:main                 │
└───────────────┬─────────────────────┘
                │
                ▼
┌─────────────────────────────────────┐
│  Step 2: Parse Interface Errors     │
│  - Empty interfaces {}              │
│  - Type mismatches                  │
│  - Missing properties               │
└───────────────┬─────────────────────┘
                │
                ▼
┌─────────────────────────────────────┐
│  Step 3: Fix by Convention          │
│  - Fill empty interfaces            │
│  - Add typia tags                   │
│  - Fix nullable types               │
└───────────────┬─────────────────────┘
                │
                ▼
┌─────────────────────────────────────┐
│  Step 4: Re-run Build               │
│  Loop until 0 errors                │
└─────────────────────────────────────┘

Step 1: Run Build

npm run build:main 2>&1 | head -100

Capture interface-related errors.


Step 2: Parse Errors

Common error patterns:

  • Type '{}' is not assignable → Empty interface
  • Property 'X' does not exist on type '{}' → Empty interface
  • Type 'string' is not assignable to type 'string & Format<"uuid">' → Missing typia tag

Step 3: Fix by Convention

Empty Interface Fix

Read Prisma schema and fill interface:

// Before
export type IEntity = {};

// After
import { tags } from "typia";

export type IEntity = {
  id: string & tags.Format<"uuid">;
  name: string;
  status: "active" | "inactive";
  created_at: string & tags.Format<"date-time">;
  updated_at: string & tags.Format<"date-time">;
  deleted_at: (string & tags.Format<"date-time">) | null;
};

ICreate Convention

export namespace IEntity {
  export type ICreate = {
    name: string;
    status?: "active" | "inactive";  // optional with default
  };
}

IUpdate Convention

export namespace IEntity {
  export type IUpdate = {
    name?: string;
    status?: "active" | "inactive";
  };
}

ISummary Convention

export namespace IEntity {
  export type ISummary = {
    id: string & tags.Format<"uuid">;
    name: string;
    status: "active" | "inactive";
    created_at: string & tags.Format<"date-time">;
  };
}

IRequest Convention

export namespace IEntity {
  export type IRequest = {
    page?: number & tags.Minimum<1>;
    limit?: number & tags.Minimum<1> & tags.Maximum<100>;
    search?: string;
    status?: "active" | "inactive";
  };
}

Typia Tags

// UUID
id: string & tags.Format<"uuid">;

// Email
email: string & tags.Format<"email">;

// URL
url: string & tags.Format<"uri">;

// DateTime
created_at: string & tags.Format<"date-time">;

// Numeric constraints
page: number & tags.Minimum<1>;
limit: number & tags.Minimum<1> & tags.Maximum<100>;

Nullable Types

// Nullable field
deleted_at: (string & tags.Format<"date-time">) | null;

// Optional nullable field
description?: string | null;

Path Naming Fix

Fix redundant path segments where the same word repeats:

// Before - redundant word in path: /{word}/{word}s
@Controller("{prefix}/{word}/{word}s")
export class {Word}{Word}sController { ... }

// After - remove redundant segment
@Controller("{prefix}/{word}s")
export class {Word}sController { ... }

Pattern to fix:

  • /{word}/{word}s → /{word}s
  • /{word}/{word}-* → /{word}-* or /{word}/*

When fixing paths, also update:

  1. Controller @Controller() decorator
  2. Controller class name
  3. Controller file name and directory
  4. Related provider function names
  5. Test file paths and API calls

Step 4: Verify

npm run build:main

Repeat Steps 2-4 until no interface errors.


Common Fixes

| Error Pattern | Fix | |---------------|-----| | Empty interface {} | Read Prisma schema, define all fields | | Missing typia tag | Add appropriate tags.Format<> | | Nullable mismatch | Add \| null for nullable fields | | Missing namespace | Add namespace with ICreate, IUpdate, etc. | | Redundant path /{word}/{word}s | Remove duplication: /{word}s |


Exit Condition

  • npm run build:main completes with no interface errors
  • All interfaces properly defined
  • All typia tags applied
  • No redundant path segments (/{word}/{word}s pattern)

Du fichier au premier essai

Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.

Consulter la source et ses fichiers annexes

Ce téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.

1. Télécharger le fichier

Télécharger SKILL.md

Depuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/fix-interface-errors-mrx3xxtv/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.

Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.

mkdir -p '.skill-downloads/fix-interface-errors-mrx3xxtv' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/fix-interface-errors-mrx3xxtv/download' --output '.skill-downloads/fix-interface-errors-mrx3xxtv/SKILL.md.part' && mv '.skill-downloads/fix-interface-errors-mrx3xxtv/SKILL.md.part' '.skill-downloads/fix-interface-errors-mrx3xxtv/SKILL.md'

2. Vérifier les prérequis

Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.

Outils déclarés par l’auteur (à vérifier dans votre agent) : Read, Edit, Write, Bash, Grep, Glob

Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.

Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.

3. Charger la skill

Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.

Claude Code
test -f '.skill-downloads/fix-interface-errors-mrx3xxtv/SKILL.md' && test -s '.skill-downloads/fix-interface-errors-mrx3xxtv/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/fix-interface' && cp -R '.skill-downloads/fix-interface-errors-mrx3xxtv' '.claude/skills/fix-interface'

OpenSkills

OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.

Installation officielle d’OpenSkills
openskills install './.skill-downloads/fix-interface-errors-mrx3xxtv'

openskills read 'fix-interface-errors-mrx3xxtv'

La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.

Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.

openskills sync

Mode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.

4. Faire un premier essai

Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :

Lis .skill-downloads/fix-interface-errors-mrx3xxtv/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.

Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.

Skills similaires