Рассмотрим следующий код:
interface Example {
foo: string
}
type GenericExample<T> = T extends Examlep ? 'foo' : 'bar';
Этот код должен привести к ошибке компиляции, поскольку Examlep
написано неправильно; нет типа с именем Examlep
, и, очевидно, программист намеревался написать здесь Example
.
Теперь представьте, что ключевое слово infer
не требуется в предложении extends
условного типа. Тогда приведенный выше код не даст ошибку компиляции; он увидел бы, что не существует типа с именем Examlep
, определите, какой это тип, а затем (поскольку Examlep
не имеет ограничений) заметьте, что T
действительно расширяет Examlep
для выведенного типа.
В этом случае GenericExample<T>
будет всегда быть 'foo'
независимо от значения T
, и не будет ошибки компиляции, чтобы сообщить программисту об ошибке. Это было бы неправильно для компилятора, почти всегда.