Tengo una función que valida la entrada.
export const isValidString = (value: string | null | undefined): boolean => { return value != null && value.length > 0 && value.trim() != ""; }; const func = (input: string) =>{ // some code } const someFunction = (input : string | null | undefined) => { if(isValidString(input)){ func(input); //This is the line that is complaining } };
la llamada a la función arroja un error que no estoy seguro de por qué, ya que isValidString
se asegura de que la entrada no esté indefinida. ¿Por qué?
Argument of type 'string | undefined' is not assignable to parameter of type 'string'. Type 'undefined' is not assignable to type 'string'.ts(2345)
Sin embargo, si solo hago
if(input != null) func(input);
Todo funciona
Cuando isValidString()
solo devuelve un valor boolean
, TypeScript no sabe que ha verificado que su tipo es una string
ahora.
Por ejemplo, cuando pasa el cursor sobre la variable de input
en este ejemplo de patio de juegos mecanografiado , puede ver que el tipo sigue siendo string | undefined | null
Para cambiar eso, su función debe ser un protector de tipo
export const isValidString = (value: string | null | undefined): value is string => {
Tenga en cuenta que el tipo de retorno de la función ahora es el value is string
Cuando pasa el cursor sobre la input
en el nuevo ejemplo , puede ver que el tipo ahora es string