discriminated-unions
Apply, review, and explain discriminated unions in TypeScript. Use automatically for tasks involving mutually exclusive variants, invalid state prevention, exhaustiveness checking, variant-specific object properties, application state, function arguments, or React props.
Profil de l’actif
Recherche et travail de connaissance
Deep research, source comparison, literature review, RAG, knowledge search, and reports.
Scénario
Agents de recherche
I need my agent to research a topic, compare sources, and produce a concise report.
Adéquation Agent
Claude Code + CLI + Codex
Compatible avec Codex, Claude Code, Cursor, CLI ou des Agents personnalisés.
Installer
Prêt
npx skills add mkosir/typescript-style-guide --skill discriminated-unions
Maintenance
À jour
Mis à jour aujourd’hui
Risque
Sûr à essayer
Quality score needs review
Qualité GitHub
780
76/100 Qualité · 82/100 Confiance
Tags de couverture
Notes de revue
Quality score needs review
Carte d’adoption Agent
Confiance, audit et préparation à l’installation en un coup d’œil
Ces scores combinent les métadonnées publiques du dépôt, les signaux de revue OpenAgentSkill, la fraîcheur de maintenance et la préparation à l’installation. Ils servent à présélectionner et ne remplacent pas la revue humaine.
Qualité
SolideSolid option that is likely worth shortlisting for production workflows.
Confiance
Revoir avant installationBon signal de présélection, mais l’Agent doit examiner les notes d’audit, la politique d’installation et les preuves de résultats avant de l’exécuter.
Audit
Sûr à essayerRevue lisible par machine de la préparation à l’installation, des métadonnées de sécurité, de la maintenance et du risque d’adoption.
Trust Score OpenAgentSkill v5
Revue humaine avant installation
À utiliser comme candidat principal après revue humaine ou en sandbox.
Stars
780 stars GitHub
Activité du dépôt
780 stars et 37 forks
Maintenance
Mis à jour aujourd’hui
Licence
MIT
Installer
npx skills add mkosir/typescript-style-guide --skill discriminated-unions
Sécurité d’installation
Chemin d’installation standard de package ou runtime
Surface de permissions
filesystem or document access, network or browser access
Résultats Agent
Pas encore de données de résultats Agent
Documentation
Contexte README/SKILL.md solide
Résumé des risques
Risque de métadonnées faible
- Quality score needs review
Préparation à l’installation
Chemin d’installation disponible
- Le chemin d’installation est disponible
- La preuve du dépôt est disponible
- La licence est déclarée
- Pas encore de preuve de résultat Agent-Proven
Métadonnées lisibles par Agent
Données de décision lisibles par machine pour ce skill.
Utilisez ce bloc ou le JSON intégré pour décider si un Agent doit installer ce skill, choisir une alternative ou demander d’abord une revue humaine.
Tâches adaptées
- workflows Agents de code
- Équipes Claude Code
- Équipes qui valorisent les signaux d’adoption GitHub
- Inspect source files
Agents adaptés
Décision d’installation
- Commande
- npx skills add mkosir/typescript-style-guide --skill discriminated-unions
- Politique
- Revoir
- Revue humaine
- Oui
Confiance et risque
- Confiance
- 77/100
- Audit
- 85/100
- Niveau de risque
- Sûr à essayer
Boucle de résultat
- Endpoint
- /api/agent/outcome
- ID d’événement
- resolve
- Résultats
- 5
Commande d’installation
npx skills add mkosir/typescript-style-guide --skill discriminated-unionsNe pas utiliser quand
- Équipes qui nécessitent un SLA soutenu par le fournisseur
- Environnements fortement conformes sans revue interne de sécurité
- No OpenAgentSkill engagement data yet
- Quality score needs review
- Production credentials, payments, or irreversible account changes without explicit human review
Skill alternatif
Last30days Skill
53.5K Stars
npx skills add mvanhorn/last30days-skill -g
Skill alternatif
Academic Research Skills
38.4K Stars
npx skills add Imbad0202/academic-research-skills
Skill alternatif
GPT Researcher
28.0K Stars
npx skills add assafelovic/gpt-researcher
Skill alternatif
DeepResearch
19.8K Stars
npx skills add Alibaba-NLP/DeepResearch
Sécurité Agent v2
69/100 · Revoir avant installation
Bons signaux d’audit et de sécurité, sans indice de permission à haut risque dans les métadonnées publiques.
Consultez la page d’audit, puis autorisez l’installation de l’Agent dans un workflow isolé.
Moyen
Accès réseau
La skill récupère probablement des pages distantes, API, dépôts ou services externes.
Moyen
Accès au système de fichiers
La skill peut lire ou écrire des fichiers de projet, documents, artefacts générés ou l’état local de l’espace de travail.
- Quality score needs review
Cibles d’installation
Installer ce skill dans votre workflow Agent
Utilisez le point de terminaison public pour récupérer la commande, la checklist, les prompts et les liens canoniques.
OpenAgentSkill CLI
Resolve policy, run the source installer safely, and report a verified install receipt.
$ npx --yes https://github.com/Leon-Drq/openagentskill/releases/download/cli-v0.2.1/openagentskill-0.2.1.tgz install mkosir-discriminated-unionsPlan de résolution Agent
Laissez un Agent vérifier la pertinence avant l’installation.
L’API Resolve renvoie la skill sélectionnée, des alternatives, la politique de sécurité, les notes d’audit, la cible d’installation et un prompt prêt à l’emploi.
Ouvrir JSON
/api/agent/resolve?task=Use%20discriminated-unions%20for%20an%20agent%20workflow&agent=codex&max_risk=medium
Texte Resolve
/api/agent/resolve?task=Use%20discriminated-unions%20for%20an%20agent%20workflow&agent=codex&max_risk=medium&format=text
Relais d’installation
/api/skills/mkosir-discriminated-unions/install
L’Agent doit vérifier
- Task fit and alternatives from Resolve API.
- Audit score, trust score, and safety policy warnings.
- Install target compatibility for Codex, Claude Code, Cursor, or CLI.
Copier le prompt
Task: Use discriminated-unions in this workspace.
Resolve first: https://www.openagentskill.com/api/agent/resolve?task=Use%20discriminated-unions%20for%20an%20agent%20workflow&agent=codex&max_risk=medium
Review install handoff: https://www.openagentskill.com/api/skills/mkosir-discriminated-unions/install
Install command: npx skills add mkosir/typescript-style-guide --skill discriminated-unions
Before running it, summarize audit warnings, required permissions, and the fallback skill if install is risky.Relais Agent
Donnez à l’Agent le chemin d’installation, pas un autre annuaire.
Utilisez le point de terminaison public pour récupérer la commande, la checklist, les prompts et les liens canoniques.
Relais d’installation
/api/skills/mkosir-discriminated-unions/install
Format texte LLM
/api/skills/mkosir-discriminated-unions/install?format=text
Trouver des alternatives
/api/skills/search?q=discriminated-unions&limit=3
Prompt Agent
Use discriminated-unions for this task. Review https://www.openagentskill.com/api/skills/mkosir-discriminated-unions/install, then install with: npx skills add mkosir/typescript-style-guide --skill discriminated-unionsMétadonnées Registry
Profil lisible par Agent pour la sélection automatique de skills.
L’API Registry fournit les signaux de décision, confiance, audit, cas d’usage et installation sans analyser l’interface.
Manifest
/api/registry/manifest/mkosir-discriminated-unions
Texte LLM
/api/registry/manifest/mkosir-discriminated-unions?format=text
Alias d’installation
/api/registry/install/mkosir-discriminated-unions
Recommander
/api/registry/recommend?task=Use%20discriminated-unions%20in%20an%20agent%20workflow&limit=3
Adéquation Agent
Agents de code
Tags de cas d’usage
Plateformes
Claude Code
Rapport d’audit
Sûr à essayer · 85/100
Revue lisible par machine de la préparation à l’installation, des métadonnées de sécurité, de la maintenance et du risque d’adoption.
Panneau de décision Agent
Choix principal pour Agents de code
Use this as a leading candidate, then validate the README and install path in your own agent stack.
Rôle dans la pile
Choix principal
Pertinence principale
Agents de code
Libellé de confiance
Prêt pour la production
Chemin d’installation
Commande prête
À utiliser lorsque
- workflows Agents de code
- Équipes Claude Code
- Équipes qui valorisent les signaux d’adoption GitHub
Preuves
- 780 stars GitHub
- recent repository activity
- install command or GitHub repo available
- profil qualité 76/100
revoir d’abord
- No OpenAgentSkill engagement data yet
Chemin d’implémentation
- 1Installez-le dans un Agent en sandbox et exécutez une tâche de Agents de code de bout en bout.
- 2Compare output quality, latency, and failure behavior against at least one alternative.
- 3Promote it into production only after reviewing repository permissions, license, and maintenance signals.
Profil de confiance
Revoir avant installation
Bon signal de présélection, mais l’Agent doit examiner les notes d’audit, la politique d’installation et les preuves de résultats avant de l’exécuter.
Adoption GitHub
Info780 stars GitHub
Activité stars/forks
Info780 stars et 37 forks; l’activité des issues n’est pas disponible dans les métadonnées actuelles
Maintenance récente
ValidéMis à jour aujourd’hui
Clarté de licence
ValidéMIT
Signaux positifs
- Revue IA approuvée
- Le chemin d’installation est disponible
- La preuve du dépôt est disponible
- Dépôt maintenu récemment
- Signal d’adoption GitHub significatif
- La commande d’installation ne présente aucun motif de haut risque évident
- La boucle de résultats est prête mais nécessite la première exécution réelle de l’Agent
Réviser avant installation
- Quality score needs review
- Pas encore de rapports de résultats Agent réels
- Une revue humaine est requise avant une installation sans surveillance
Action recommandée
À utiliser comme candidat principal après revue humaine ou en sandbox.
Profil qualité
Solide candidat pour les workflows Agent
Solid option that is likely worth shortlisting for production workflows.
Adéquation au workflow
Utilisez cette skill dans ces scénarios
Build and ship code
Coding agents
I need a coding agent that can understand a repository, edit code, and review pull requests.
Investigate faster
Research agents
I need my agent to research a topic, compare sources, and produce a concise report.
Automate repeated work
Workflow automation
I need my agent to automate a repeated workflow across tools and files.
Adéquation au workflow
Ajouter à un workflow complet
Inspect, patch, and verify code
Coding review agent
A workflow for software agents that inspect repositories, review pull requests, generate tests, and turn findings into shippable patches.
Find, compare, and synthesize
Research report agent
A workflow for agents that gather sources, compare claims, summarize long material, and draft useful research briefs.
Turn skills into distribution
Content growth agent
A workflow for turning newly indexed skills into SEO briefs, social drafts, comparison pages, and reusable publishing workflows.
Liste d’alternatives
Comparer avant installation
Similar skills that may fit this task.
Last30days Skill
Research the last 30 days across Reddit, X, YouTube, Hacker News, Polymarket, GitHub, and the web, then synthesize a grounded brief for an AI agent.
Academic Research Skills
Academic Research Skills for Claude Code: research → write → review → revise → finalize
GPT Researcher
Run autonomous deep research over web and local sources
DeepResearch
Tongyi Deep Research, the Leading Open-source Deep Research Agent
Vue d’ensemble
--- name: discriminated-unions description: Apply, review, and explain discriminated unions in TypeScript. Use automatically for tasks involving mutually exclusive variants, invalid state prevention, exhaustiveness checking, variant-specific object properties, application state, function arguments, or React props. ---
# Discriminated Unions
Apply the TypeScript Style Guide's discriminated-union conventions in the context of the current task.
## Workflow
1. Inspect the consuming repository's conventions and configuration. 2. Let explicit repository conventions take precedence over this opinionated guidance. 3. Apply, review, or explain only the guidance relevant to the task. 4. State important tradeoffs when the appropriate model depends on context or judgment.
## Boundaries
- Use discriminated unions for mutually exclusive variants that require different data. - Do not force a discriminated union when properties may independently be absent or when only a value changes. - Keep TypeScript and ESLint responsible for checks they can enforce automatically. - Do not introduce unrelated TypeScript Style Guide conventions merely because this skill is active.
<!-- BEGIN CANONICAL GUIDE CONTENT -->
## Discriminated Unions {#discriminated-unions}
If there's only one TypeScript feature to choose from, embrace discriminated unions.
A discriminated union is a union of object types that share a property with distinct literal values. Checking that property narrows the value to the matching variant.
Use discriminated unions when variants are mutually exclusive and each variant requires different data. Keep properties optional when they may independently be absent, and use a literal union when only the value changes.
Discriminated unions are a powerful concept to model complex data structures and improve type safety, leading to clearer and less error-prone code. You may encounter discriminated unions under different names, such as tagged unions or sum types, in languages such as C, Haskell, and Rust (in conjunction with pattern-matching).
Advantages of discriminated unions:
- As mentioned in [Required & Optional Object Properties](#required--optional-object-properties), [Function Arguments](#function-arguments), and [Props as Discriminated Type](#props-as-discriminated-type), discriminated unions replace optional properties that depend on a variant with required properties for that variant, reducing complexity. - Exhaustiveness Checking - The configured ESLint rule reports when a switch does not handle every variant of a discriminated union.
<Rule href="https://typescript-eslint.io/rules/switch-exhaustiveness-check/">{`"@typescript-eslint/switch-exhaustiveness-check": "error"`}</Rule>
```ts type Circle = { kind: 'circle'; radius: number }; type Square = { kind: 'square'; size: number }; type Triangle = { kind: 'triangle'; base: number; height: number };
// Create a discriminated union 'Shape', with the 'kind' property to discriminate the type of object. type Shape = Circle | Square | Triangle;
const calculateArea = (shape: Shape) => { // ESLint reports that the switch is missing the 'triangle' case switch (shape.kind) { case 'circle': return Math.PI * shape.radius ** 2; case 'square': return shape.size ** 2; } }; ```
- Avoid code complexity introduced by multiple [boolean flags](#application-state) that represent mutually exclusive states. - Clear code intent, as it becomes easier to read and understand by explicitly indicating the possible cases for a given type. - TypeScript can narrow down union types, ensuring code correctness at compile time. - Discriminated unions make refactoring and maintenance easier by providing a centralized definition of related types. When adding or modifying types within the union, the compiler reports any inconsistencies throughout the codebase. - IDEs can leverage discriminated unions to provide better autocompletion and type inference.
### Practical Applications
#### Required & Optional Object Properties {#required--optional-object-properties}
**Strive to have the majority of object properties required and use optional properties sparingly.**
This approach reflects designing type-safe and maintainable code:
- Clarity and Predictability - Required properties make it explicit which data is always expected. This reduces ambiguity for developers using or consuming the object, as they know exactly what must be present. - Type Safety - When properties are required, TypeScript can enforce their presence and catch missing properties during type checking. - Avoids Overuse of Optional Chaining - If too many properties are optional, it often leads to extensive use of optional chaining (`?.`) to handle potential undefined values. This clutters the code and obscures its intent.
Use optional properties when values may independently be absent. When property presence depends on the object's variant, use a **discriminated union type**.
```ts // ❌ Avoid optional properties when their presence depends on the variant type User = { id?: number; email?: string; dashboardAccess?: boolean; adminPermissions?: ReadonlyArray<string>; subscriptionPlan?: 'free' | 'pro' | 'premium'; rewardsPoints?: number; temporaryToken?: string; };
// ✅ Use a discriminated union so each variant has only its required properties type AdminUser = { role: 'admin'; id: number; email: string; dashboardAccess: boolean; adminPermissions: ReadonlyArray<string>; };
type RegularUser = { role: 'regular'; id: number; email: string; subscriptionPlan: 'free' | 'pro' | 'premium'; rewardsPoints: number; };
type GuestUser = { role: 'guest'; temporaryToken: string; };
// Discriminated union type 'User' ensures clear intent with no optional properties type User = AdminUser | RegularUser | GuestUser;
const regularUser: User = { role: 'regular', id: 212, email: 'lea@user.com', subscriptionPlan: 'pro', rewardsPoints: 1500, dashboardAccess: false, // Error: 'dashboardAccess' property does not exist }; ```
#### Application State
When application states require different data, model the state and its data together with a discriminated union. This prevents invalid combinations, such as loading while holding both data and an error.
```ts // ❌ Boolean flags and optional properties allow invalid state combinations type RequestState = { isLoading: boolean; data?: Products; error?: string; };
// ✅ Each state contains only the data valid for that state type RequestState = | { status: 'idle' } | { status: 'loading' } | { status: 'success'; data: Products } | { status: 'error'; error: string }; ```
#### Function Arguments
When a function accepts mutually exclusive variants that require different properties, use a **discriminated union type**. This decreases complexity in the function's API and ensures that only the required properties are passed for each use case.
```ts // ❌ Avoid optional properties that allow invalid combinations in the function API type NotificationParams = { channel: 'email' | 'sms'; email?: string; phoneNumber?: string; subject?: string; message: string; };
// ✅ Use a discriminated union so each variant requires only its valid properties type EmailNotificationParams = { channel: 'email'; email: string; subject: string; message: string; };
type SmsNotificationParams = { channel: 'sms'; phoneNumber: string; message: string; };
type NotificationParams = EmailNotificationParams | SmsNotificationParams;
export const sendNotification = (params: NotificationParams) => { switch (params.channel) { case 'email': return sendEmail(params.email, params.subject, params.message); case 'sms': return sendSms(params.phoneNumber, params.message); } }; ```
#### React Props
##### Required & Optional Props
**Strive to have the majority of props required and use optional props sparingly.**
Especially when creating a new component for its first or single use case, the majority of props should be required. When the component starts covering more use cases, introduce optional props only for values that may genuinely be absent across those use cases. There are potential exceptions where a component API needs to implement optional props from the start (e.g. shared components covering multiple use cases, UI design system components - button `isDisabled` etc.)
If a component or hook becomes too complex, it should probably be broken into smaller pieces. An exaggerated example: implementing 10 React components with 5 required props each is better than implementing one "can do it all" component that accepts 50 optional props.
##### Props as Discriminated Type
When component variants require different props, use a **discriminated union type**. This approach reduces complexity in the component API and ensures that only the required props are passed for each variant.
```tsx // ❌ Avoid optional props that allow invalid combinations in the component API type AvatarProps = { variant: 'image' | 'initials'; src?: string; alt?: string; initials?: string; };
// ✅ Use a discriminated union so each variant requires only its valid props type ImageAvatarProps = { variant: 'image'; src: string; alt: string; };
type InitialsAvatarProps = { variant: 'initials'; initials: string; };
type AvatarProps = ImageAvatarProps | InitialsAvatarProps;
export const Avatar = (props: AvatarProps) => { switch (props.variant) { case 'image': return <img src={props.src} alt={props.alt} />; case 'initials': return <span>{props.initials}</span>; } }; ```
<!-- END CANONICAL GUIDE CONTENT -->
Détails techniques
- Version
- 1.0.0
- Licence
- MIT
- Dernière mise à jour
- 23 août 2026
- Publié
- 23 août 2026
Instantané de décision
Choix principal
780 stars GitHub
Audit
Revue d’installation
Revue d’installation et d’adoption
- Sécurité
- 86/100
- Maintenance
- 100/100
- Installer
- 92/100
Preuves validées par Agent
Preuves validées par Agent
Rapports après resolve, revue, installation et une exécution limitée.
- Taux de réussite
- —
- Échec récent
- —
- Résultats
- 0
- Qualité de sortie
- —
- Échecs
- 0
- Non pertinent
- 0
- Installations
- 0
- Bloqué par le risque
- 0
- Configuration requise
- 0
- Production
- 0
Aucune donnée de résultat Agent pour l’instant. La première exécution peut signaler succès, besoin de configuration, blocage de risque, échec ou non-pertinence via /api/agent/outcome.
Installer
Ajouter au workflow Agent
Gratuit et open source. Examinez le rapport avant l’installation dans des Agents de production.
Boucle de croissance
Kit de partage
Brouillon guidé par scénario pour discriminated-unions, prêt pour une publication manuelle sur X.
A practical pick for source-backed research: discriminated-unions: Apply, review, and explain discriminated unions in TypeScript. Use automatically for tasks involving mutually exclusive var... 780 stars https://www.openagentskill.com/skills/mkosir-discriminated-unions?ref=x
Réponse facultative avec commande d’installation
Listing + install path for discriminated-unions: https://www.openagentskill.com/skills/mkosir-discriminated-unions?ref=x Install: npx skills add mkosir/typescript-style-guide --skill discriminated-unions
Source de la fiche
Indexé par Registry
Cette fiche a été indexée à partir de sources publiques et n’est pas marquée officielle tant qu’une revendication de mainteneur n’est pas approuvée.
- Créateur
- mkosir
- Indexé par
- Index communautaire OpenAgentSkill
L’attribution renvoie au dépôt public ou au profil du créateur. Les créateurs peuvent revendiquer la fiche pour mettre à jour les signaux de propriété.
Revendiquer ce skillRevendication du propriétaire
Revendiquer cette fiche de skill
Cette fiche Indexé par Registry est attribuée à mkosir, mais n’est pas encore marquée officielle. Revendiquez-la pour ajouter un signal de propriétaire vérifié et rendre les futures mises à jour de lancement, d’installation et d’audit plus fiables.
Kit de backlinks créateur
Ajoutez les badges de preuve à votre README
Affichez la fiche canonique, les signaux actuels de confiance et d’audit, ainsi que de vraies preuves Agent-Proven là où les développeurs évaluent le dépôt.
[](https://www.openagentskill.com/skills/mkosir-discriminated-unions)
[](https://www.openagentskill.com/skills/mkosir-discriminated-unions)
[](https://www.openagentskill.com/skills/mkosir-discriminated-unions/audit)
[](https://www.openagentskill.com/skills/mkosir-discriminated-unions)Auteur
mkosir
@mkosir
Tags
Adéquation plateforme
Signaux de santé
- Stars GitHub
- 780
- Score de qualité
- 44/100
- Dernier push GitHub
- 23 août 2026
- Indications de framework
- Inconnu
- Vues OpenAgentSkill
- 0
- Copies d’installation
- 0
- Clics sortants
- 0
Signal de communauté
Indiquez si ce skill semble utile à votre workflow Agent. Les retours agrégés améliorent le classement au fil du temps.
Confiance et sécurité
Revoir avant installation
- Adoption GitHub780 stars GitHubInfo
- Activité stars/forks780 stars et 37 forks; l’activité des issues n’est pas disponible dans les métadonnées actuellesInfo
- Maintenance récenteMis à jour aujourd’huiValidé
- Clarté de licenceMITValidé
- Complétude README/SKILL.mdLes métadonnées incluent suffisamment de contexte d’usage et de workflowValidé
- Risque dépendances/runtimenetwork or browser surfaceValidé
Skills associés
Last30days Skill
Research the last 30 days across Reddit, X, YouTube, Hacker News, Polymarket, GitHub, and the web, then synthesize a grounded brief for an AI agent.
53.5K StarsAcademic Research Skills
Academic Research Skills for Claude Code: research → write → review → revise → finalize
38.4K StarsGPT Researcher
Run autonomous deep research over web and local sources
28.0K StarsDeepResearch
Tongyi Deep Research, the Leading Open-source Deep Research Agent
19.8K Stars