Exportovanie pomocných funkcií v TypeScripte?


Snažím sa urobiť toto (Pseudo kód):

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

Funkcia isDefined vracia boolean, ak hodnota argumentu nie je null alebo undefined, a ako argument prijíma typ any. Máte nejaké nápady, ako ju dostať do chodu?

Odpoveď č. 1

Odporúčanie: vyhýbajte sa používaniu Function, kedykoľvek je to možné. Zruší to bezpečnosť typov:

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

Aby ste ušetrili typový podpis, zbavte sa Function. Rovnako môžete použiť != pre jednoduchosť:

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

Ako bonus môžete zneužívať generiká, aby bola funkcia o niečo inteligentnejšia. Tu funkcia používa generikum T na odhadnutie typu toho, čo sa do nej posiela, potom používa typovú stráž, aby zúžila typ v niektorých kontextoch, napr. v if príkaze. (Poznámka: definoval som ju ako function, aby fungovala v súboroch .tsx. Jednogenerické šípkové funkcie nemôžu byť analyzované kvôli nejednoznačnostiam s 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
}

Odpoveď č. 2

OK - Myslím, že som to konečne pochopil:

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