typescript - Hvordan definere typen til en navngitt funksjon?


function Foo(): string {}

Betyr at en Foo er en funksjon som returnerer en string.

interface SFC {
    (props: Props): any;
}

const Foo: SFC = p => {};

Betyr at Foo er en anonym funksjon som matcher signaturen SFC og at p er av typen Props.

Hvordan kan jeg deklarere function Foo() som samsvarer med SFC? Hva er syntaksen?

dvs., jeg vil erklære en funksjon ved å bruke function-nøkkelordet (ikke const) og funksjonen selv er av typen SFC.

Disse fungerer ikke:

function Foo: SFC () {}
function Foo() {}: SFC

Svar #1

Det finnes en rekke TypeScript-forslag for å eksplisitt typisere en funksjon erklært som en navngitt, hoistet funksjon (i motsetning til et uttrykk). Ingen av dem har blitt implementert ennå. #22063 ser ut til å være den mest aktive.

  • #16918: (Forslag) syntaks for kontekstuell typisering av en funksjonsdeklarasjon
  • #22063: Forslag: Typeannotasjoner og grensesnitt for funksjonsdeklarasjoner

    • Dupe #37433: Legg til mekanisme for å spesifisere typen til en funksjonsdeklarasjon
    • Dupe #39419: Tillat at funksjonsdeklarasjoner kan typers
    • Dupe #40455: Gi en måte å indikere at en funksjonsdeklarasjon samsvarer med et grensesnitt/type
  • #34319: Beskriv funksjonssignatur ved å bruke et grensesnitt

    • Dupe #39039: En syntaks for funksjonsdeklarasjoner for å «implementere» typer (som const C: React.FC<Props>=(props0) => ...)
  • #40378: Type Cast eller Påstander på FunctionDeclaration

Utgivelsen av satisfies-nøkkelordet i TypeScript 4.9 (#47920, #46827) er relatert, men gjelder kun uttrykk; det endrer ikke funksjonsdefinisjoner. Åpen sak #51556 hevder å følge opp #47920 med satisfies på funksjoner, med #52195 duplisert mot den.

Relaterte SO-spørsmål:

  • Spesifiser metodens type uten å konvertere metoden til en egenskap
  • Å skrive en funksjon identisk med en annen funksjon med Typescript

Relaterte artikler