traduccion parse ejemplo booleanos booleanas typescript

typescript - parse - Conversión de mecanografía a booleano



parse boolean javascript (4)

Con TypeScript 2.0.2 puede hacer esto:

type Falsey = '''' | 0 | false | null | undefined; function eatFruit(fruit: string | Falsey) { if (fruit) { alert(`Ate ${fruit}`); } else { alert(''No fruit to eat!''); } } const fruits = [''apple'', ''banana'', ''pear'']; eatFruit(fruits[0]); // alerts ''Ate apple'' eatFruit(fruits[1]); // alerts ''Ate banana'' eatFruit(fruits[2]); // alerts ''Ate pear'' eatFruit(fruits[3]); // alerts ''No fruit to eat!'' const bestBeforeDay = 12; let day = 11; eatFruit(day < bestBeforeDay && ''peach''); // alerts ''Ate peach'' day += 1; eatFruit(day < bestBeforeDay && ''peach''); // alerts ''No fruit to eat!'' let numMangos = 1; eatFruit(numMangos && ''mango''); // alerts ''Ate Mango'' numMangos -= 1; eatFruit(numMangos && ''mango''); // alerts ''No fruit to eat!''

En Typescript puedo hacer esto:

var xxx : some_type; if (xxx) foo(); else bar();

Aquí xxx se tratará como booleano, independientemente de su tipo.

Me gustaría hacer lo mismo en un argumento de función. Tengo esta función:

function foo(b : boolean) { ... }

Quiero poder llamar a foo(xxx) y hacer que xxx sea tratado como booleano, independientemente de su tipo. Pero Typescript no permitirá eso.

Intenté esto:

foo(<boolean>xxx);

pero ese Typescript tampoco permitirá eso.

Puedo hacer esto:

foo(xxx ? true : false);

Pero eso parece un poco tonto. Hay una mejor manera de hacerlo?


Puede usar este truco que permite TypeScript y que funciona bien en JavaScript:

foo(!!xxx);

Alternativamente, puedes lanzarlo a any

foo(<any>xxx);


Si bien no puedes convertir un número directamente a un booleano, puedes convertirlo a la clase booleana contenedora e inmediatamente desenvolverlo. Por ejemplo:

foo(<boolean><Boolean>xxx);

Aunque es torpe, evita el borrado de tipos de conversión a <any> . ¡También es posiblemente menos oscuro y más legible que el !! enfoque (sin duda también en el código js transpilado).


foo(!!xxx); // This is the common way of coercing variable to booleans. // Or less pretty foo(xxx && true); // Same as foo(xxx || false)

Sin embargo, probablemente termines duplicando el double bang cada vez que invoques a foo en tu código, por lo que una mejor solución es mover la coerción a boolean dentro de la función DRY

foo(xxx); foo(b: any){ const _b = !!b; // Do foo with _b ... } /*** OR ***/ foo(b: any){ if(b){ // Do foo ... } }