Gestión segura de unknown
Restrinja los valores unknown antes de utilizarlos de forma segura.
Gestión segura de unknown es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de TypeScript Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de TypeScript Academy incluye 4 lecciones en total.
Trabajar de forma segura con unknown
Tipar los datos externos como unknown es solo la mitad del trabajo. La otra mitad consiste en estrecharlos a un tipo concreto antes de utilizarlos. En esta lección se describen las principales técnicas de estrechamiento.
function describe(v: unknown): string {
if (typeof v === 'string') return 'string: ' + v;
if (typeof v === 'number') return 'number: ' + v;
return 'other';
}
console.log(describe('hi'), describe(7), describe(true));Estrechamiento con typeof
La comprobación con typeof es la herramienta más sencilla. Estrecha unknown a tipos primitivos: string, number, boolean, function, object y otros.
function double(v: unknown): number {
if (typeof v === 'number') {
return v * 2; // v is number here
}
return 0;
}
console.log(double(21), double('no'));Estrechamiento con instanceof
Para las instancias de clases, use instanceof. Esto estrecha unknown a la clase específica y permite acceder de forma segura a sus métodos y propiedades.
function handle(v: unknown): string {
if (v instanceof Date) {
return v.toISOString(); // v is Date
}
return 'not a date';
}
console.log(handle(new Date(0)));Estrechamiento con el operador in
El operador in comprueba si existe una propiedad en un objeto y estrecha los valores tipados como objetos. Primero confirme que el valor sea un objeto distinto de null y, después, examine sus claves.
function getName(v: unknown): string {
if (typeof v === 'object' && v !== null && 'name' in v) {
return String((v as { name: unknown }).name);
}
return 'anonymous';
}
console.log(getName({ name: 'Ada' }), getName(5));Guardas de tipo personalizadas
Una guarda de tipo personalizada es una función cuyo tipo de retorno es value is T. Cuando devuelve true, TypeScript estrecha el argumento a T en el punto de llamada.
function isString(v: unknown): v is string {
return typeof v === 'string';
}
function shout(v: unknown): string {
return isString(v) ? v.toUpperCase() : '?';
}
console.log(shout('hey'), shout(9));Guardas para estructuras de objetos
Las guardas personalizadas resultan especialmente útiles para validar estructuras de objetos. Escriba una función que compruebe todos los campos obligatorios y el resto del código podrá confiar en el tipo estrechado.
type User = { id: number; name: string };
function isUser(v: unknown): v is User {
return typeof v === 'object' && v !== null &&
'id' in v && 'name' in v;
}
console.log(isUser({ id: 1, name: 'Sam' }), isUser({}));JSON.parse devuelve datos similares a unknown
JSON.parse está tipado para devolver any, lo que elude silenciosamente la seguridad. La práctica recomendada consiste en capturarlo como unknown y validar la estructura antes de confiar en ella.
function parseConfig(text: string): unknown {
return JSON.parse(text);
}
const raw = parseConfig('{"port":8080}');
console.log(typeof raw);Validar JSON analizado
Combine JSON.parse con una guarda de tipo para transformar de forma segura un texto no confiable en un valor tipado. Si la validación falla, gestione el error en lugar de confiar en datos incorrectos.
type Config = { port: number };
function isConfig(v: unknown): v is Config {
return typeof v === 'object' && v !== null &&
'port' in v && typeof (v as any).port === 'number';
}
const data: unknown = JSON.parse('{"port":8080}');
if (isConfig(data)) console.log('Port:', data.port);Encadenar varias guardas
Para entradas complejas, encadene varias guardas: compruebe primero la estructura general y, después, refínela. Cada guarda estrecha un poco más el tipo y produce tipos precisos y seguros paso a paso.
function process(v: unknown): string {
if (Array.isArray(v)) {
if (v.every((x) => typeof x === 'string')) {
return v.join('-');
}
}
return 'invalid';
}
console.log(process(['a', 'b']), process([1, 2]));Lanzar excepciones ante datos no válidos
Cuando falle la validación de datos obligatorios, lance una excepción. Combinado con una función auxiliar que devuelve never en caso de error, este patrón mantiene despejado y bien tipado el camino habitual.
function asNumber(v: unknown): number {
if (typeof v === 'number') return v;
throw new Error('Expected a number');
}
console.log(asNumber(42));
try { asNumber('x'); } catch (e) { console.log('rejected'); }Reunirlo todo
El patrón completo consiste en recibir los datos como unknown, estrecharlos con guardas y, después, operar con el tipo preciso. Esta es la frontera segura entre el mundo externo sin tipos y su código tipado.
type Point = { x: number; y: number };
function isPoint(v: unknown): v is Point {
return typeof v === 'object' && v !== null &&
'x' in v && 'y' in v;
}
const input: unknown = { x: 1, y: 2 };
if (isPoint(input)) console.log(input.x + input.y);Comprobación rápida
Compruebe cuánto entiende de la gestión segura de unknown.
Resumen: gestionar unknown
Ha aprendido a estrechar unknown mediante:
typeofpara tipos primitivos einstanceofpara instancias de clases.- El operador
inpara las propiedades de los objetos. - Guardas de tipo personalizadas que devuelven
value is T. - La validación de los resultados de
JSON.parseantes de confiar en ellos.
Siguiente curso: aserciones y conversiones de tipos.
function isNonEmpty(v: unknown): v is string {
return typeof v === 'string' && v.length > 0;
}
console.log(isNonEmpty('hi'), isNonEmpty(''));Preguntas frecuentes
¿La lección «Gestión segura de unknown» es gratis?
Sí — el texto completo de «Gestión segura de unknown» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de TypeScript Academy, actualiza a CoddyKit PRO. El curso de TypeScript Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Gestión segura de unknown»?
Restrinja los valores unknown antes de utilizarlos de forma segura. Practicas TypeScript Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar TypeScript Academy?
No se requiere experiencia previa. TypeScript Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Gestión segura de unknown»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de TypeScript Academy?
Sí. Cada lección de TypeScript Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Comprender unknown frente a any
- El tipo never y los estados imposibles
- El tipo void en funciones
- Gestión segura de unknown