Aserciones y su costo en TypeScript
as, non-null y las dos salidas de emergencia de las que debes desconfiar.
const raw: unknown = JSON.parse('{"lang":"ts"}');
const risky = raw as { lang: string };
console.log(risky.lang.toUpperCase()); // trusted, unchecked
const rows: (string | null)[] = ["a", null];
const first = rows[0]!;
console.log(first.length);
function narrow(value: unknown): { lang: string } {
if (typeof value !== "object" || value === null || !("lang" in value)) {
throw new TypeError("no lang");
}
const { lang } = value as { lang: unknown };
if (typeof lang !== "string") throw new TypeError("lang is not a string");
return { lang };
}
console.log(narrow(raw).lang);
const widened = "monokai" as const satisfies string;
const doubled = <T,>(value: T): [T, T] => [value, value];
console.log(widened, doubled(1));
Cómo funciona
asreinterpreta sin chequear; puede mentir.!asevera no nulo y revienta en tiempo de ejecución cuando se equivoca.- Una función que valida es la alternativa honesta.
Palabras clave y builtins usados aquí
JSONTasconstfunctionifreturnstringthrowunknown
El intento, en números
- Líneas
- 23
- Caracteres a escribir
- 724
- Tokens
- 204
- Ritmo de tres estrellas
- 90 tpm
Al ritmo de tres estrellas de 90 tokens por minuto, este intento toma unos 136 segundos.
Paso 2 de 2 en Los tipos incómodos; paso 6 de 23 en Tipos y anotaciones.