Vyhledávání na webu

Jak importovat odvozený typ exportované funkce v TypeScriptu


Mám dva soubory myFunction.ts a index.ts.

  • myFunction.ts exportuje funkci takto:
export default (param1: string) => { return true }
  • index.ts importuje tuto funkci takto:
import myFunction from './myFunction'

a pak chci použít typy z myFunction takto:

function bla(aFn: myFunction) {
  aFn('hello')
}

Kompliátor mi však dává nelze najít název myFunction.

Jak získám typy pro exportovanou funkci?

Jako řešení můžete vytvořit a exportovat typ pro funkci takto:

export type MyFunctionType = (param1: string) => boolean
export default (param1: string) => { return true; }

A pak importujte takto:

import myFunction, { MyFunctionType } from './myFunction';

function bla(myFunction: MyFunctionType) {
  myFunction('hello')
}

ale pak byste museli specifikovat typovou informaci dvakrát, což je něco, čemu bych se chtěl vyhnout...

Odpověď č. 1

Louy měl do určité míry pravdu. K získání informací o typu je potřeba použít typeof:

import myFunction from './myFunction'

function bla(myFunction: typeof myFunction) {
  myFunction('hello')
}

Odpověď č. 2

Myslím, že mícháš typy a výchozí parametry nebo něco takového.

Typ a je Function. a není samostatný typ. Výchozí parametr lze určit takto:

function bla(aFn = a) {
  aFn('hello');
}

Pokud místo toho potřebujete, aby aFn měl podpis podobný a, budete muset tento podpis specifikovat nebo pro něj vytvořit rozhraní.

function bla(aFn: (s: string) => boolean) {
  aFn('hello');
}

Nebo...

interface a { (s: string): boolean; }
function bla(aFn: a) {
  aFn('hello');
}