web-dev-qa-db-fra.com

Déclaration de const de type générique

En essayant de réduire le passe-partout, je déclare une sorte d'interface de fonction générique comme type. Ensuite, je veux déclarer un const de ce type. Alors, pourquoi TypeScript suppose que la déclaration foo est légitime et bar ne l'est pas? Ces déclarations ne sont-elles pas pratiquement identiques? TypeScript manque-t-il d'une fonctionnalité simple ou manque-t-il de certains détails? Existe-t-il des solutions de contournement si je ne souhaite pas répéter explicitement l'interface FunctionType?

type FunctionType<TValue> = (value: TValue) => void;

const foo = <TValue>(value: TValue): void => {
}

//const bar: FunctionType<TValue> = (value) => { // Cannot find name 'TValue'
//}
12
idementia

Il existe une différence entre un type générique qui se trouve être une fonction et un type qui est une fonction générique.

Ce que vous avez défini il y a un type générique qui est une fonction. Cela signifie que nous pouvons attribuer cela aux consts qui ont les types génériques spécifiés:

type FunctionType<TValue> = (value: TValue) => void;
const bar: FunctionType<number> = (value) => { // value is number
}

Pour définir un type qui est une fonction générique, nous devons mettre le paramètre type avant la liste des arguments

type FunctionType = <TValue>(value: TValue) => void;
const bar: FunctionType = <TValue>(value) => { // generic function
}