| name | migrate-to-shoehorn |
| description | Migra archivos de test de type assertions `as` a @total-typescript/shoehorn. Usar cuando el usuario mencione shoehorn, quiera reemplazar `as` en tests, o necesite datos parciales de test. |
Migrar a shoehorn
¿Por qué shoehorn?
shoehorn te deja pasar datos parciales en tests manteniendo contento a TypeScript. Reemplaza las assertions as con alternativas type-safe.
Solo código de test. Nunca usar shoehorn en código de producción.
Problemas de as en tests:
- El modelo está entrenado para no usarlo
- Hay que especificar manualmente el tipo destino
- Doble as (
as unknown as Type) para datos intencionalmente incorrectos
Instalación
npm i @total-typescript/shoehorn
Patrones de migración
Objetos grandes con pocas propiedades necesarias
Antes:
type Request = {
body: { id: string };
headers: Record<string, string>;
cookies: Record<string, string>;
};
it("gets user by id", () => {
getUser({
body: { id: "123" },
headers: {},
cookies: {},
});
});
Después:
import { fromPartial } from "@total-typescript/shoehorn";
it("gets user by id", () => {
getUser(
fromPartial({
body: { id: "123" },
}),
);
});
as Type → fromPartial()
Antes:
getUser({ body: { id: "123" } } as Request);
Después:
import { fromPartial } from "@total-typescript/shoehorn";
getUser(fromPartial({ body: { id: "123" } }));
as unknown as Type → fromAny()
Antes:
getUser({ body: { id: 123 } } as unknown as Request);
Después:
import { fromAny } from "@total-typescript/shoehorn";
getUser(fromAny({ body: { id: 123 } }));
Cuándo usar cada una
| Función | Caso de uso |
|---|
fromPartial() | Pasar datos parciales que siguen pasando el typecheck |
fromAny() | Pasar datos intencionalmente incorrectos (conserva autocompletado) |
fromExact() | Forzar el objeto completo (cambiar por fromPartial después) |
Flujo de trabajo
-
Reunir requisitos — preguntar al usuario:
- ¿Qué archivos de test tienen assertions
as causando problemas?
- ¿Están lidiando con objetos grandes donde solo importan algunas propiedades?
- ¿Necesitan pasar datos intencionalmente incorrectos para testear errores?
-
Instalar y migrar: