Considérons le code suivant :
interface Example {
foo: string
}
type GenericExample<T> = T extends Examlep ? 'foo' : 'bar';
Ce code devrait entraîne une erreur de compilation, car Examlep
est mal orthographié ; il n'existe pas de type nommé Examlep
et il est évident que le programmeur voulait écrire Example
ici.
Maintenant, imaginez le infer
Le mot clé n'est pas nécessaire dans un extends
d'une clause de type conditionnel. Alors le code ci-dessus ne donnerait pas d'erreur de compilation ; il verrait qu'il n'y a pas de type nommé Examlep
de déduire de quel type il s'agit, puis (puisque Examlep
n'a pas de contraintes) observe que T
s'étend en effet Examlep
pour le type déduit.
Dans ce cas, GenericExample<T>
sería toujours être 'foo'
indépendamment de ce que T
est, et il n'y aurait pas d'erreur de compilation pour informer le programmeur de son erreur. Ce serait la mauvaise chose à faire pour le compilateur, presque tout le temps.