169 похожих чатов

Кто нибудь может объяснить человеческим языком что такое infer и

зачем он?

5 ответов

15 просмотров

Практический пример могу один привести - можно достать тип дженерика. Например, откуда-то снаружи (например из библиотеки) приходит типа ArrayOfBirds, где-то внутри библиотеки он определён как type ArrayOfBirds = Array<Bird>. При этом сам Bird не экспортируется. Вот тут как раз infer может помочь достать его из ArrayOfBirds: type MyBird = ArrayOfBirds extends Array<infer T> ? T : never Встроенные типы Parameters и ReturnType тоже работают примерно так же, через infer

Timofey-Goncharov Автор вопроса

а почему он всегда именно в тернарнике засунут?

🤷‍♂

infer — это способ извлечь часть из составного типа; например, получить из типа функции тип возвращаемого значения, или тип первого аргумента. infer может стоять только после extends (то есть во втором операнде условного типа), а извлечённый им тип — только после ? (то есть в положительной ветке этого условного типа); infer можно добавить в любой условный тип (не только внутрь дженерика). Например, (() => 0) extends (() => infer R) ? R : never — результатом будет извлечённый тип 0. Извлечённый тип можно сразу использовать для конструирования нового типа — например, результатом { foo: 1 } extends { foo: infer P } ? { bar: P } : never будет { bar: 1 }. Отрицательная ветка в условном типе с infer сработает, только если не существует типа, обеспечивающего выполнение условия (при подстановке на место infer) — string extends (infer T)[] ? T : never даст never, поскольку тип string не является подтипом массива T[] ни для какого T. В одном условном типе можно использовать несколько infer — [0, 1] extends [infer X, infer Y] ? [Y, X] : never вычисляется в [1, 0]. Если использовать несколько infer с одним именем (или infer по объединению), извлекаемые типы будут объединяться для infer в ковариантной позиции, и пересекаться для infer в контравариантной позиции: play.

Божественное объяснение

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта