Predicados de tipo en TypeScript
Una función que devuelve x is T le enseña al compilador qué verificaste.
type Run = { lang: string; tpm: number };
function isRun(value: unknown): value is Run {
return (
typeof value === "object" &&
value !== null &&
"lang" in value &&
typeof (value as Run).lang === "string" &&
typeof (value as Run).tpm === "number"
);
}
function assertRun(value: unknown): asserts value is Run {
if (!isRun(value)) throw new TypeError("not a run");
}
function isDefined<T>(value: T | null | undefined): value is T {
return value !== null && value !== undefined;
}
const raw: unknown = { lang: "ts", tpm: 98 };
if (isRun(raw)) console.log(raw.lang.toUpperCase());
assertRun(raw);
console.log(raw.tpm + 1);
console.log([1, null, 2, undefined].filter(isDefined));
Cómo funciona
- El predicado estrecha en cada punto de llamada.
- Es la manera honesta de validar datos que vienen de afuera.
- Una firma de aserción estrecha sin devolver un valor.
Palabras clave y builtins usados aquí
Tasconstfunctionifnumberreturnstringthrowtypeunknown
El intento, en números
- Líneas
- 26
- Caracteres a escribir
- 679
- Tokens
- 193
- Ritmo de tres estrellas
- 95 tpm
Al ritmo de tres estrellas de 95 tokens por minuto, este intento toma unos 122 segundos.
Paso 3 de 4 en Estrechamiento; paso 9 de 23 en Tipos y anotaciones.