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'
//}
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
}