Typescript: Variable no reconocida como tipo literal de cadena cuando se usa un operador ternario

Creado en 3 nov. 2016  ·  1Comentario  ·  Fuente: microsoft/TypeScript



Versión de TypeScript: 2.0.3 / nightly (2.1.0-dev.201xxxxx)
2.0.3

Código

function test(val: 'AAA'|'BBB'){
  //xxx
}

let a = true ? 'AAA' : 'BBB';
test(a);

Comportamiento esperado:
Compilado exitosamente

Comportamiento real:
Error obtenido:

Error TS2345: El argumento de tipo 'cadena' no se puede asignar al parámetro de tipo '"AAA" | "BBB" '.

Question

Comentario más útil

Esto se ha discutido varias veces.

Primero, está asignando a una variable let, lo que significa que el compilador asumirá que es posible que desee cambiar el valor en el futuro, por lo tanto, no asigna un tipo literal de cadena a la variable.

Además, en 2.0, nunca hubo una inferencia de literales. El desarrollador tendría que hacerlo explícitamente. Entonces, para arreglar esto:

function test(val: 'AAA'|'BBB'){
  //xxx
}

let a: 'AAA' | 'BBB' = true ? 'AAA' : 'BBB';
test(a);

Pero en TypeScript 2.1 interpretará las asignaciones a const de la manera más estricta posible, por lo que podría hacerlo así:

function test(val: 'AAA'|'BBB'){
  //xxx
}

const a = true ? 'AAA' : 'BBB';
test(a);

>Todos los comentarios

Esto se ha discutido varias veces.

Primero, está asignando a una variable let, lo que significa que el compilador asumirá que es posible que desee cambiar el valor en el futuro, por lo tanto, no asigna un tipo literal de cadena a la variable.

Además, en 2.0, nunca hubo una inferencia de literales. El desarrollador tendría que hacerlo explícitamente. Entonces, para arreglar esto:

function test(val: 'AAA'|'BBB'){
  //xxx
}

let a: 'AAA' | 'BBB' = true ? 'AAA' : 'BBB';
test(a);

Pero en TypeScript 2.1 interpretará las asignaciones a const de la manera más estricta posible, por lo que podría hacerlo así:

function test(val: 'AAA'|'BBB'){
  //xxx
}

const a = true ? 'AAA' : 'BBB';
test(a);
¿Fue útil esta página
0 / 5 - 0 calificaciones