技能 typescript-best-practices
📦

typescript-best-practices

安全

Aplicar Mejores Prácticas de TypeScript

也可从以下获取: 0xBigBoss

Escribir TypeScript sin patrones conduce a errores en tiempo de ejecución y mantenimiento difícil. Esta habilidad proporciona patrones para desarrollo orientado a tipos que captura errores en tiempo de compilación, hace que los estados inválidos sean irrepresentables y agrega validación en tiempo de ejecución.

支持: Claude Codex Code(CC)
📊 70 充足
1

下载技能 ZIP

2

在 Claude 中上传

前往 设置 → 功能 → 技能 → 上传技能

3

开启并开始使用

测试它

正在使用“typescript-best-practices”。 Refactor this state to use discriminated unions: ```ts type LoadingState = { loading: boolean; data?: Data; error?: Error };```

预期结果:

```ts
type LoadingState<T> =
| { status: 'idle' }
| { status: 'loading' }
| { status: 'success'; data: T }
| { status: 'error'; error: Error };

// Compiler now enforces exhaustive handling
function processState<T>(state: LoadingState<T>): Result {
switch (state.status) {
case 'idle': return defaultResult();
case 'loading': return pendingResult();
case 'success': return successResult(state.data);
case 'error': return errorResult(state.error);
default: const _exhaustive: never = state;
throw new Error(`unhandled state: ${_exhaustive}`);
}
}
```

正在使用“typescript-best-practices”。 Add Zod validation with type inference: ```ts interface User { id: string; email: string; name: string; } async function createUser(data: unknown): Promise<User> { // TODO: validate data return data as User; } ```

预期结果:

```ts
import { z } from 'zod';

const UserSchema = z.object({
id: z.string().uuid(),
email: z.string().email(),
name: z.string().min(1),
});

type User = z.infer<typeof UserSchema>;

async function createUser(raw: unknown): Promise<User> {
const result = UserSchema.safeParse(raw);
if (!result.success) {
throw new Error(`Invalid user: ${result.error.message}`);
}
return result.data;
}
```

安全审计

安全
v4 • 1/21/2026

Static analysis detected 117 patterns but all are false positives. JavaScript template literals flagged as shell backticks, crypto.randomUUID() flagged as weak crypto, example config patterns flagged as credential access. This is legitimate TypeScript documentation with no actual security risks.

2
已扫描文件
1,449
分析行数
0
发现项
4
审计总数
未发现安全问题
审计者: claude 查看审计历史 →

质量评分

38
架构
100
可维护性
87
内容
24
社区
100
安全
91
规范符合性

你能构建什么

Corrección de Código Propenso a Errores

Refactorizar código que usa banderas opcionales en uniones discriminadas, haciendo imposible representar estados inválidos en tiempo de compilación.

Agregar Validación en Tiempo de Ejecución

Agregar esquemas Zod con inferencia de tipos para validar datos externos en límites de confianza, previniendo desajustes de tipos en tiempo de ejecución.

Aplicar Garantías en Tiempo de Compilación

Agregar declaraciones switch exhaustivas con verificaciones never que fallan en compilación cuando se agregan nuevas variantes.

试试这些提示

Patrón de Tipo Básico
Apply TypeScript best practices to this code. Make illegal states unrepresentable using discriminated unions where boolean flags represent mutually exclusive states.
Validación en Tiempo de Ejecución
Add runtime validation using Zod. Define a schema as the single source of truth and infer TypeScript types from it. Use safeParse for input validation and strict parse at trust boundaries.
Manejo Exhaustivo de Errores
Add exhaustive switch handling with never checks to this code. Every code path must return a value or throw. Unhandled cases should become compile errors.
Configuración con Seguridad de Tipos
Create a typed configuration module using Zod validation. Load config from environment variables at startup, validate with Zod, and export a typed config object. Avoid accessing process.env directly in application code.

最佳实践

  • Definir tipos antes de la implementación. Dejar que el sistema de tipos guíe qué estructuras de datos y firmas de funciones son necesarias.
  • Usar uniones discriminadas en lugar de propiedades opcionales para hacer que los estados inválidos sean irrepresentables en tiempo de compilación.
  • Agregar verificaciones never en casos default de switch. Las nuevas variantes de enum causarán errores de compilación en lugar de errores silenciosos.

避免

  • Usar propiedades opcionales y banderas booleanas para estados mutuamente excluyentes conduce a combinaciones inválidas.
  • Omitir validación en tiempo de ejecución en límites de confianza permite que los desajustes de tipos causen fallos en tiempo de ejecución.
  • Acceder a process.env en toda la base de código crea dependencias de configuración que no pueden tipificarse.

常见问题

¿Cuándo debo usar tipos marcados en lugar de string?
Usa tipos marcados cuando tienes múltiples tipos string que no deben mezclarse, como UserId y OrderId. El compilador detectará cuando se pase un OrderId donde se espera un UserId.
¿Cómo manejo arrays vacíos en código con seguridad de tipos?
Usa verificaciones condicionales antes de hacer map o reduce. El sistema de tipos reduce los tipos de array basándose en verificaciones de longitud. Agrega manejo explícito para el caso vacío.
¿Debo usar Zod o validación solo con tipos?
Usa Zod para datos de fuentes externas (APIs, entrada de usuario, archivos). Usa tipos TypeScript para contratos de código interno. Zod proporciona garantías en tiempo de ejecución; los tipos solo proporcionan verificaciones en tiempo de compilación.
¿Cómo manejo respuestas de API desconocidas de forma segura?
Usa safeParse para intentar el parsing, luego maneja tanto los casos de éxito como de error. Nunca uses aserciones de tipos en datos no confiables. Registra errores de parsing para depuración.
¿Para qué se usa el tipo never?
El tipo never representa valores que nunca ocurren. Úsalo en declaraciones switch exhaustivas como verificación en tiempo de compilación. Si todos los casos están manejados, la asignación de variable never prueba la completitud.
¿Cómo mantengo tipos y esquemas sincronizados?
Define esquemas como la única fuente de verdad e infiere tipos TypeScript con z.infer. Evita duplicar definiciones de tipos y esquemas. Actualiza el esquema y el tipo inferido se actualiza automáticamente.

开发者详情

文件结构

📄 SKILL.md