¿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);
};
