Возьми этот интерфейс
export interface OperationStream<In, Out, Context> {
Возьми эту декларацию
const : OperationStream<never, boolean, ConnectionContext & { userId: string }> = ...
Все это прекрасно компилируется.
Это, конечно, нет. Имеет смысл для меня.
const exactOp: OperationStream<never, boolean, void> = registerOp
Так почему же в мире компилируется следующий код?
const exactOp: OperationStream<never, boolean, never> = registerOp
PS. Вот что говорят официальные документы:
Тип never является подтипом и присваивается каждому типу; однако ни один тип не является подтипом или не может быть назначен никогда (кроме самого себя). Даже любой не может быть назначен никогда.