Búsqueda de sitios web

¿Exportando funciones utilitarias en TypeScript?


Estoy tratando de hacer esto (pseudocódigo):

export const isDefined:Function<boolean> = ((value:any)) => {
    return !(value==null);
};

La función isDefined devuelve un booleano si el argumento value no es null o undefined, y toma any como argumento. ¿Ideas sobre cómo hacer que funcione?

Respuesta #1

Recomendación: evite usar Function siempre que sea posible. Borra la seguridad de tipo:

// these should error, but they don't
isDefined()
isDefined(1, 2, 3, 'too', 'many', 'args')

Para conservar la firma del tipo, deshazte del Function. También puedes usar != por cuestión de simplicidad:

export const isDefined = (value: any): boolean => {
  return value != null
}

Como beneficio adicional, puedes abusar de los genéricos para hacer que la función sea un poco más inteligente. Aquí, la función utiliza un genérico T para inferir el tipo de lo que se le está pasando, luego utiliza un guardia de tipo para reducir el tipo en algunos contextos, por ejemplo, una declaración if. (Nota: la definí como una function para que funcione en archivos .tsx. Las funciones flecha con un solo genérico no pueden analizarse debido a ambigüedades con JSX.)

export function isDefined<T>(value: T | null | undefined): value is T {
  return value != null
}

declare const message: string | undefined
if (isDefined(message)) {
  message // here, message is string
} else {
  message // here, message is undefined
}

Respuesta #2

Vale, creo que finalmente lo entendí:

export const isDefined: Function = (value: any): boolean => {
  return !(value == null);
};