Saltar al contenido

    ↑↓ mover · ⏎ abrir · esc cerrar

    TS2345

    Tipo de argumento incorrecto

    Argument of type 'number' is not assignable to parameter of type 'string'.

    Las palabras del propio compilador. Sin traducir — es la cadena que pegaste en el buscador.

    El mismo fallo de asignabilidad que TS2322, pero en una llamada. Un código aparte porque el arreglo casi siempre está en otro sitio.

    Reproducción

    declare function take(value: string): void
    
    take(1)

    La compilación afirma que esto emite exactamente este código.

    Por qué lo dice el compilador

    Un parámetro es una variable que la función declara en tu nombre, así que pasar un argumento es una asignación y obedece las mismas reglas. Tiene su propio código porque la pregunta interesante es distinta: con TS2322 normalmente elegiste el valor equivocado, y con TS2345 normalmente llamas a algo que espera una forma que aún no has construido. La función te ha dicho exactamente qué quiere, en la segunda mitad del mensaje.

    Arreglos

    1. 01
      declare function take(value: string): void
      
      take('1')

      Pasa lo que pidió.

    2. 02
      declare function take(value: string | number): void
      
      take(1)

      O cambia la firma, si la función debería haberlo aceptado desde el principio. Solo merece la pena cuando la función es tuya y su cuerpo es realmente seguro para el tipo más amplio.

    Conclusión

    La segunda mitad del mensaje es una especificación. Constrúyela, en vez de recurrir a `as` para silenciar la primera mitad.

    Errores