j'avoir un exemple des fonctions suivantes (Compose est de Ramda):tapuscrit question de l'inférence de type lorsque la fonction retourne fonction
declare function compose<V0, T1, T2>(fn1: (x: T1) => T2, fn0: (x0: V0) => T1): (x0: V0) => T2;
interface User {
id: number
}
function fn1(input: any): User {
return {id: 1};
}
function fn2<I, O>(fn: (i: I) => O): (i: I) => O {
return (data) => {
try {
return fn(data);
} catch (e) {
return undefined
}
};
}
Lorsque j'ai essayé de l'utiliser comme ceci:
compose(fn2(user => user.id), fn1);
tapuscrit jette un erreur suivant:
TS2339:Property 'id' does not exist on type '{}'.
quelqu'un at-kno w, que dois-je faire pour aider TypeScript à déduire un type correct pour user
?
Bien sûr, le code suivant fonctionnera:
compose<any, User, number>(fn2(user => user.id), fn1);
MISE À JOUR: On dirait que l'équipe dactylographiée est au courant de ce comportement , du moins, ce n'est pas un bug. Voir [ce commentaire] (https://github.com/Microsoft/TypeScript/issues/15680#issuecomment-307571917). – Deftomat