Estoy tratando de convertir la siguiente función de JavaScript a TypeScript y recibo el siguiente error
$("#checkoutSubmit").click(function () { var departureDate = $("#bookingDepartureDateInput").val(); localStorage.setItem("datevalue", departureDate); console.log(localStorage.getItem("datevalue")) });Nunca he usado TypeScript y parece que estoy luchando para convertir esto. ¿Puedo obtener información sobre cómo reescribir este código en TypeScript? Gracias.
el valor de JQuery val(); El método puede devolver String , Number o Array<string> , lo que provoca un error porque localStorage.setItem solo acepta cadenas.
Si está seguro de que $("#bookingDepartureDateInput").val(); siempre devuelve una cadena que puede usar as string para decirle a TypeScript que puede asumir que será una cadena:
$("#checkoutSubmit").click(function () { const departureDate = $("#bookingDepartureDateInput").val() as string; localStorage.setItem("datevalue", departureDate); console.log(localStorage.getItem("datevalue")) }); JQuery .val() documentos.
El método jQuery val devuelve string , string[] , number o undefined . Pero está tratando de usarlo con el método setItem de la interfaz de almacenamiento, que solo acepta cadenas. Entonces obtienes un error, ya que eso puede ser un error.
Si sabe que el valor de val será una cadena, mientras que podría simplemente hacer una as string en él, el problema con eso es que está asumiendo que no está verificando: que nada hará ese reclamo (un tipo afirmación ) falsa. En su lugar, podría usar una función de afirmación de tipo para tranquilizar a TypeScript y asegurarse de que la condición sea correcta:
function assertIsString(value: any): asserts value is string { if (typeof value !== "string") { throw new Error(`String expected, got non-string instead`); } }El código sería:
$("#checkoutSubmit").click(function () { const departureDate = $("#bookingDepartureDateInput").val(); assertIsString(departureDate); localStorage.setItem("datevalue", departureDate); console.log(localStorage.getItem("datevalue")) }); Eso funciona porque después de la llamada a la función de aserción, TypeScript sabe que tiene una string .