Encontré un código en los documentos mecanografiados que me resulta confuso.
function compare(a: string, b: string): -1 | 0 | 1 { return a === b ? 0 : a > b ? 1 : -1; }¿Alguien puede explicar qué está pasando en la declaración de devolución? ¿Es un operador ternario?
function compare(a: string, b: string): -1 | 0 | 1 { return a === b ? 0 : a > b ? 1 : -1; } Primero, analice el tipo de retorno declarado -1 | 0 | 1 :
Esta es una unión de tipos Literal [ver documentos para referencia] . Esto indica que el tipo de retorno de esta función será:
-1 ,0 ,1 . Ahora analice la instrucción return en la función return a === b ? 0 : (a > b ? 1 : -1); :
Este es un operador ternario de JavaScript 'anidado' [ver documentos para referencia] .
La expresión antes del ? se evalúa primero; Si se evalúa como true , se evalúa la expresión antes de : , si es false , se evalúa la expresión después de : .
Es equivalente a la siguiente instrucción if :
if (a === b) { return 0; } else { if (a > b) { return 1; } else { return -1; { }o dicho más simplemente:
if (a === b) { return 0; } else if (a > b) { return 1; } else { return -1; {Piensa en esto, de esta manera:
function compare(a: string, b: string): -1 | 0 | 1 { return a === b ? 0 : (a > b ? 1 : -1); } Si a === b , devuelve 0. De lo contrario, ¿ a > b ? Si es así, devuelve 1. De lo contrario, devuelve -1. Podría ser más fácil pensar así:
function compare(a: string, b: string): -1 | 0 | 1 { if (a === b) { return 0; } else { if (a > b) { return 1; } else { return -1; } }Aunque esa es la forma en que lo pienso , esta es la forma en que escribiría el código con declaraciones if (recuerde, las tres son equivalentes):
function compare(a: string, b: string): -1 | 0 | 1 { if (a === b) { return 0; } else if (a > b) { return 1; } else { return -1; } }