unknown, any y never en TypeScript
unknown exige un chequeo, any los suprime todos, never significa que no puede ocurrir.
function parse(raw: unknown): number {
if (typeof raw === "number") return raw;
if (typeof raw === "string") return Number.parseFloat(raw);
throw new TypeError(`cannot parse ${typeof raw}`);
}
function fail(message: string): never {
throw new Error(message);
}
type Shape = { kind: "circle"; r: number } | { kind: "square"; side: number };
function area(shape: Shape): number {
switch (shape.kind) {
case "circle":
return Math.PI * shape.r ** 2;
case "square":
return shape.side ** 2;
default: {
const impossible: never = shape;
return fail(`unhandled ${JSON.stringify(impossible)}`);
}
}
}
console.log(parse("2.5"), area({ kind: "square", side: 3 }));
Cómo funciona
unknownes el tipo tope seguro: estréchalo antes de usarlo.neveres el tipo vacío, lo devuelve una función que siempre lanza.- Un switch exhaustivo asigna el sobrante a
never.
Palabras clave y builtins usados aquí
JSONMathNumberShapecaseconstdefaultfunctionifnevernumberparseFloatreturnstringswitchthrowtypeunknown
El intento, en números
- Líneas
- 26
- Caracteres a escribir
- 656
- Tokens
- 183
- Ritmo de tres estrellas
- 90 tpm
Al ritmo de tres estrellas de 90 tokens por minuto, este intento toma unos 122 segundos.
Paso 1 de 2 en Los tipos incómodos; paso 5 de 23 en Tipos y anotaciones.