Type

Введение

Автор иллюстрации — Magdalena Tomczyk

Python — язык с динамической типизацией и позволяет нам довольно вольно оперировать переменными разных типов. Однако при написании кода мы так или иначе предполагаем переменные каких типов будут использоваться (это может быть вызвано ограничением алгоритма или бизнес логики)


И для корректной работы программы нам важно как можно раньше найти ошибки, связанные с передачей данных неверного типа

Сохраняя идею динамической утиной типизации в современных версиях Python (3.6+) поддерживает аннотации типов переменных, полей класса, аргументов и возвращаемых значений функций:

  • PEP 3107 — Function Annotations
  • PEP 484 — Type Hints
  • PEP 526 — Syntax for Variable Annotations

Аннотации типов просто считываются интерпретатором Python и никак более не обрабатываются, но доступны для использования из стороннего кода и в первую очередь рассчитаны для использования статическими анализаторами.

Меня зовут Тихонов Андрей и я занимаюсь backend-разработкой в Lamoda.

В этой статье я хочу объяснить основы использования аннотаций типов и рассмотреть типичные примеры, реализуемые аннотациями из пакета .

Недостатки

Не лишен интерфейс и недостатков:

  • не самая прочная конструкция из-за большого количества контактов в центре;
  • увеличенный уровень напряжения при недостаточном контроле может вызвать перегрев и возгорание устройства – это произошло с Samsung Galaxy Note 7;
  • для подключения старых гаджетов понадобятся переходник micro USB, Type-A на версию C;
  • не все кабели и устройства Type-C поддерживают все его возможные функции – можно столкнуться с неполной совместимостью внешне одинаковых портов.

При аккуратном обращении недостатки довольно незначительные. Все же вставлять симметричный кабель проще, а избежать возгорания помогут оригинальные аксессуары от производителей. В современные гаджеты встраивают автоматическую проверку на подлинность зарядного устройства и провода – и это не попытка нажиться на аксессуарах, а гарантия безопасности использования.

Validation

elements of type have the same validation features available to them as regular inputs. It is less likely that you’d want to use validation features in general for search boxes. In many cases, users should just be allowed to search for anything, but there are a few cases to consider, such as searches against data of a known format.

Note: HTML form validation is not a substitute for scripts that ensure that the entered data is in the proper format. It’s far too easy for someone to make adjustments to the HTML that allow them to bypass the validation, or to remove it entirely. It’s also possible for someone to simply bypass your HTML entirely and submit the data directly to your server. If your server-side code fails to validate the data it receives, disaster could strike when improperly-formatted data (or data which is too large, is of the wrong type, and so forth) is entered into your database.

A note on styling

There are useful pseudo-classes available for styling valid/invalid form elements: and . In this section, we’ll use the following CSS, which will place a check (tick) next to inputs containing valid values, and a cross next to inputs containing invalid values.

input:invalid ~ span:after {
    content: '';
    padding-left: 5px;
    position: absolute;
}

input:valid ~ span:after {
    content: '✓';
    padding-left: 5px;
    position: absolute;
}

The technique also requires a element to be placed after the form element, which acts as a holder for the icons. This was necessary because some input types on some browsers don’t display icons placed directly after them very well.

Making input required

You can use the attribute as an easy way of making entering a value required before form submission is allowed:

<form>
  <div>
    <input type="search" id="mySearch" name="q"
    placeholder="Search the site..." required>
    <button>Search</button>
    <span class="validity"></span>
  </div>
</form>
input {
  margin-right: 10px;
}

input:invalid ~ span:after {
    content: '';
    padding-left: 5px;
    position: absolute;
}

input:valid ~ span:after {
    content: '✓';
    padding-left: 5px;
    position: absolute;
}

This renders like so:

In addition, if you try to submit the form with no search term entered into it, the browser will show a message. The following example is from Firefox:

Different messages will be shown when you try to submit the form with different types of invalid data contained inside the inputs; see the below examples.

Input value length

You can specify a minimum length, in characters, for the entered value using the attribute; similarly, use to set the maximum length of the entered value.

The example below requires that the entered value be 4–8 characters in length.

<form>
  <div>
    <label for="mySearch">Search for user</label>
    <input type="search" id="mySearch" name="q"
    placeholder="User IDs are 4–8 characters in length" required
    size="30" minlength="4" maxlength="8">
    <button>Search</button>
    <span class="validity"></span>
  </div>
</form>
input {
  margin-right: 10px;
}

input:invalid ~ span:after {
    content: '';
    padding-left: 5px;
    position: absolute;
}

input:valid ~ span:after {
    content: '✓';
    padding-left: 5px;
    position: absolute;
}

This renders like so:

If you try to submit the form with less than 4 characters, you’ll be given an appropriate error message (which differs between browsers). If you try to go beyond 8 characters in length, the browser won’t let you.

Specifying a pattern


You can use the attribute to specify a regular expression that the inputted value must follow to be considered valid (see for a simple crash course).

Let’s look at an example. Say we wanted to provide a product ID search form, and the IDs were all codes of two letters followed by four numbers. The following example covers it:

<form>
  <div>
    <label for="mySearch">Search for product by ID:</label>
    <input type="search" id="mySearch" name="q"
    placeholder="two letters followed by four numbers" required
    size="30" pattern="{2}{4}">
    <button>Search</button>
    <span class="validity"></span>
  </div>
</form>
input {
  margin-right: 10px;
}

input:invalid ~ span:after {
    content: '';
    padding-left: 5px;
    position: absolute;
}

input:valid ~ span:after {
    content: '✓';
    padding-left: 5px;
    position: absolute;
}

This renders like so:

Additional attributes

In addition to the attributes that operate on all elements regardless of their type, search field inputs support the following attributes:

Attribute Description
The id of the <datalist> element that contains the optional pre-defined autocomplete options
The maximum number of characters the input should accept
The minimum number of characters long the input can be and still be considered valid
A regular expression the input’s contents must match in order to be valid
An exemplar value to display in the input field whenever it is empty
A Boolean attribute indicating whether or not the contents of the input should be read-only
A number indicating how many characters wide the input field should be
Controls whether or not to enable spell checking for the input field, or if the default spell checking configuration should be used

The values of the list attribute is the of a element located in the same document. The provides a list of predefined values to suggest to the user for this input. Any values in the list that are not compatible with the are not included in the suggested options. The values provided are suggestions, not requirements: users can select from this predefined list or provide a different value.

The maximum number of characters (as UTF-16 code units) the user can enter into the search field. This must be an integer value 0 or higher. If no is specified, or an invalid value is specified, the search field has no maximum length. This value must also be greater than or equal to the value of .

The input will fail constraint validation if the length of the text entered into the field is greater than UTF-16 code units long.

The minimum number of characters (as UTF-16 code units) the user can enter into the search field. This must be a non-negative integer value smaller than or equal to the value specified by . If no is specified, or an invalid value is specified, the search input has no minimum length.

The search field will fail constraint validation if the length of the text entered into the field is fewer than UTF-16 code units long.

The attribute, when specified, is a regular expression that the input’s must match in order for the value to pass constraint validation. It must be a valid JavaScript regular expression, as used by the type, and as documented in our guide on regular expressions; the flag is specified when compiling the regular expression, so that the pattern is treated as a sequence of Unicode code points, instead of as ASCII. No forward slashes should be specified around the pattern text.

If the specified pattern is not specified or is invalid, no regular expression is applied and this attribute is ignored completely.

Tip: Use the attribute to specify text that most browsers will display as a tooltip to explain what the requirements are to match the pattern. You should also include other explanatory text nearby.

See the section for details and an example.

The attribute is a string that provides a brief hint to the user as to what kind of information is expected in the field. It should be a word or short phrase that demonstrates the expected type of data, rather than an explanatory message. The text must not include carriage returns or line feeds.

If the control’s content has one directionality (LTR or RTL) but needs to present the placeholder in the opposite directionality, you can use Unicode bidirectional algorithm formatting characters to override directionality within the placeholder; see in The Unicode Bidirectional Text Algorithm for those characters.

Note: Avoid using the attribute if you can. It is not as semantically useful as other ways to explain your form, and can cause unexpected technical issues with your content. See in <input>: The Input (Form Input) element for more information.

Note: Because a read-only field cannot have a value, does not have any effect on inputs with the attribute also specified.

The attribute is a numeric value indicating how many characters wide the input field should be. The value must be a number greater than zero, and the default value is 20. Since character widths vary, this may or may not be exact and should not be relied upon to be so; the resulting input may be narrower or wider than the specified number of characters, depending on the characters and the font ( settings in use).

This does not set a limit on how many characters the user can enter into the field. It only specifies approximately how many can be seen at a time. To set an upper limit on the length of the input data, use the attribute.

Активные кабели

В спецификациях определение active cable (активный кабель) отличается. Так, в спецификации для протокола PD прописано, что активным считается тот кабель, который имеет поддержку SOP (Start of packet), то есть способен отвечать на запросы, отправленные ему протоколом PD, и сообщать свои характеристики (какие интерфейсы и варианты питания он способен поддерживать).


В соответствии со спецификацией на Type-C активным кабелем является тот, который имеет внутри себя различные повторители, необходимые для улучшения передаваемого сигнала.

Так как на данный момент по спецификации все кабели Type-C должны иметь электронную маркировку (Emark), то есть иметь поддержку SOP, правильнее будет считать активными кабелями только те, которые имеют различные ретаймеры и редрайверы.

ReTimer (ретаймер) и ReDriver (редрайвер) – микросхемы, установленные в линиях данных. Они обеспечивают улучшение проходящего сигнала. Ретаймеры и редрайверы могут устанавливаться на всем пути передачи сигнала: и в кабеле, и на печатных платах источника/получателя (если это необходимо).

Сигнал может затухать или ослабевать при передаче на большие расстояния. Для его восстановления используются данные микросхемы. Они имеют достаточно сложный принцип работы, мы не будем описывать его в данной статье. Следует отметить, что редрайвер – это более простое устройство, которое усиливает проходящий сигнал. Ретаймер – более сложное устройство, которое ретранслирует копию сигнала. Ниже приведен пример глазковой диаграммы ослабленного сигнала, проходящего через редрайвер и ретаймер соответственно.

С появлением новых интерфейсов увеличивается скорость передачи данных, тем самым уменьшается и расстояние, на которое можно передать эти данные

Это видно, если обратить внимание на длину стандартных кабелей:

  • USB2.0 (480 Мбит/c) ~ до 4 м;
  • USB3.2 Gen1 (10 Гбит/c) ~ 2 м;
  • USB3.2 Gen2 (20 Гбит/c) ~ 1 м;
  • USB4/TBT3 (40 Гбит/c) ~ 0.8 м.

И это с учетом того, что длина 0,8 м достижима только с использованием активных кабелей. Пассивные кабели (без использования различных повторителей) имеют длину только ~ 0,3 м.

Кабель Optically Isolated Active (OIA). За счет своей внутренней структуры данный кабель способен передавать данные на расстояние более чем 50 м, тем самым увеличивая границу использования таких интерфейсов, как USB3.2/TBT3. Этот кабель электрически изолирован между двумя штекерами и должен иметь поддержку SOP с каждой из сторон. Но нужно учитывать, что кабель передает данные только дифференциальных пар RX/TX, поэтому питание и интерфейс USB2.0 не поддерживаются данным интерфейсом. Также необходимо, чтобы каждый из двух подключаемых устройств имел поддержку Vconn для питания внутренних интегральных схем кабеля. Уже в этом году ожидается разработка OIA-кабелей для интерфейса USB4.

Также необходимо помнить, что не все кабели способны поддерживать все интерфейсы, поэтому лучшим на данный момент решением будет использовать кабель для TBT3-устройств, так как он поддерживает и максимальную передачу данных, и максимальную мощность питания (имеются в виду короткие кабели до 0,8 м).

Обратная совместимость с разъемами предыдущего поколения. Для поддержки подключения устройств с Type-C к устройствам с разъемами предыдущего поколения существуют следующие типы кабелей:

  • кабели USB Type-C – USB3.1 Type-A / Type-B / Type micro-B;
  • кабели USB Type-C – USB2.0 Type-A / Type-B / Type mini-B / Type micro-B.

Описание структуры и подробная информация обо всех вышеперечисленных кабелях приведена в спецификации на кабель и разъем Type-C.

Основные отличия структуры штекера (plug) от разъема (receptacle):

На штекере дифференциальная пара USB2.0 (D+/D-) присутствует только на пинах A6–A7, на пинах B6–B7 – отсутствует. Это связано с тем, что дважды передавать один и тот же сигнал не требуется. В зависимости от ориентации кабеля пины A6–A7 на штекере будут соединяться с одной из двух пар пинов коннектора. На штекере пины CC1/CC2 отсутствуют, но вместо них присутствуют пины CC (A5) и Vconn (B5). CC отвечает за ориентацию кабеля и передачу данных по протоколу PD. Vconn является источником питания для внутренних интегральных схем кабеля

Важно запомнить, что в отличие от всех остальных линий в кабеле пины Vconn не соединены между собой напрямую.

Что такое USB Type-C в телефонах и смартфонах

Логотип интерфейса USB.

Для того чтобы разобраться с тем, что такое USB Type-C нужно сделать небольшой экскурс в историю данного интерфейса. USB или Universal Serial Bus – это компьютерный интерфейс, который появился в середине 1990-х годов и с тех пор активно применяется для подключения периферийных устройств к компьютеру. С появлением смартфонов данный интерфейс начал применяться и в них, немного позже USB начали использовать и в обычных мобильных телефонах с кнопками.

Изначально стандарт USB включал только два типа разъемов: Type-A и Type-B. Разъем Type-A использовался для подключения к устройству, на стороне которого использовался концентратор или контроллер USB интерфейса. Разъем Type-A наоборот, использовался на стороне периферийного устройства. Таким образом, обычный USB кабель включал в себя два разъема Type-A, который подключался к компьютеру или другому управляющему устройству, и Type-B, который подключался к периферийному устройству.

Кроме этого, как Type-A, так и Type-B имеют уменьшенные версии разъёмов, которые обозначаются как Mini и Micro. В результате получается достаточно большой список различных разъемов: обычный USB Type-A, Mini Type-A, Micro Type-A, обычный Type-B, Mini Type-B и Micro USB Type-B, который обычно использовался в телефонах и смартфонах и больше известен под названием Micro USB.

Сравнение разных разъемов.

С выходом третьей версии стандарта USB появилось еще несколько дополнительных разъемов, которые поддерживали USB 3.0, это: USB 3.0 Type-B, USB 3.0 Type-B Mini и USB 3.0 Type-B Micro.

Весь этот зоопарк разъемов уже не отвечал современным реалиям, в которых популярность набирали простые в использованию разъемы, такие как Lightning от Apple. Поэтому, вместе со стандартом USB 3.1 был представлен новый тип разъема под названием USB Type-C (USB-C).


Появление USB Type-C решило сразу несколько проблем. Во-первых, USB Type-C был изначально компактным, поэтому нет необходимости в использовании Mini и Micro версий разъема. Во-вторых, USB Type-C можно подключать как к периферийным устройствам, так и к компьютерам. Это позволяет отказаться от схемы, в которой Type-A подключался к компьютеру, а Type-B к периферийному устройству.

Кроме этого, USB Type-C поддерживает массу других нововведений и полезных функций:

  • Скорость передачи данных от 5 до 10 Гбит/с, а с внедрением USB 3.2 эта скорость может вырасти до 20 Гбит/с.
  • Обратная совместимость с предыдущими стандартами USB. Используя специальный переходник, устройство с USB Type-C разъемом можно подключить к обычному USB предыдущих версий.
  • Симметричный дизайн разъема, который позволяет подключать кабель любой стороной (также как в Lightning от Apple).
  • Кабель USB Type-C может использоваться для быстрой зарядки мобильных телефонов, смартфонов, а также компактных ноутбуков.
  • Поддержка альтернативных режимов работы, в которых кабель USB Type-C может использоваться для передачи информации по другим протоколам (DisplayPort, MHL, Thunderbolt, HDMI, VirtualLink).

Особенности

Новый порт USB Type-C стал компактнее своих предшественников. Его главное отличие – симметричность разъема, поэтому у такого кабеля нельзя перепутать верх и низ. Он разработан под версию 3.1 интерфейса USB. Ее отличает увеличенная скорость передачи данных – до 10 Гб в сек – и усиленный ток до 5 А. При этом версия 3.1 еще может быть изредка представлена в привычном формате разъема Type-A, а Type-С работает только под протоколом 3.1.

Разъем тайп юсб си выделяется большим числом контактов, образующими линии:

  • высокоскоростной передачи данных до 10 Гб/с;
  • низкоскоростной передачи до 480 Мб/с для совместимости со старыми устройствами;
  • питание с регулируемой в зависимости от потребности техники силой тока;
  • согласующая;
  • дополнительная – для передачи аудио.

Согласующая линия позволяет менять параметры подключения устройств. Благодаря ей система узнает о факте включения и отключения оборудования, определит нужную силу тока, может переходить в другой режим работы – передавать видеосигнал.

Поддержка браузерами

Поддержка атрибута:

Атрибут Chrome Firefox Opera Safari IExplorer Edge
type Да Да Да Да Да Да

Поддержка значений:

Значение Chrome Firefox Opera Safari IExplorer Edge
button Да Да Да Да Да Да
checkbox Да Да Да Да Да Да
color 20.0 29.0 17.0* Нет Нет 14.0
date 20.0 Нет 10.1 Нет Нет 12.0
datetime-local 20.0 Нет 10.1 Нет Нет 13.0
email 5.0 4.0 10.1 3.2 10.0 12.0
file Да Да Да Да Да Да
hidden Да Да Да Да Да Да
image Да Да Да Да Да Да
month 20.0 Нет 10.1 Нет Нет 12.0
number 6.0 29.0 10.1 5.0 10.0 12.0
password Да Да Да Да Да Да
radio Да Да Да Да Да Да
range 4.0 23.0 10.1 3.1 10.0 12.0
reset Да Да Да Да Да Да
search 4.0 4.0 12.1 5.1 10.0 12.0
submit Да Да Да Да Да Да
tel 5.0 4.0 10.1 3.2 10.0 12.0
text (по умолчанию) Да Да Да Да Да Да
time 20.0 Нет 10.1 Нет Нет 13.0
url 5.0 4.0 10.1 3.2 10.0 12.0
week 20.0 Нет 10.1 Нет Нет 12.0

Синтаксис:

<input type =  "button | checkbox | color | date | datetime-local | email | file | hidden | image | month | number | password | radio | range | reset | search | submit | tel | text | time | url | week">

Инструменты, поддерживающие аннотации

Аннотации типов поддерживаются многими IDE для Python, которые выделяют некорректный код или выдают подсказки в процессе набора текста.

Например, так это выглядит в Pycharm:

Подсветка ошибок

Подсказки:

Так же аннотации типов обрабатываются и консольными линтерами.

Вот вывод pylint:

А вот для того же файла что нашел mypy:

Поведение разных анализаторов может отличаться. Например, mypy и pycharm по разному обрабатывают смену типа переменной. Далее в примерах я буду ориентироваться на вывод mypy.

В некоторых примерах код при запуске может работать без исключений, но может содержать логические ошибки из-за использования переменных не того типа. А в некоторых примерах он может даже не выполняться.

type I[править]

ед. ч. мн. ч.
type types

type

Существительное.

Корень: -type-.

Семантические свойстваправить

Значениеправить

  1. тип; образчик, образец; представитель, типичный представитель ◆ Отсутствует пример употребления (см. рекомендации).
  2. тип, класс, род, разновидность ◆ Отсутствует пример употребления (см. рекомендации).
  3. модель ◆ Отсутствует пример употребления (см. рекомендации).
  4. типаж; тип, человек ◆ Отсутствует пример употребления (см. рекомендации).
  5. полигр. литера; шрифт ◆ Отсутствует пример употребления (см. рекомендации).
  6. штамп, оттиск ◆ Отсутствует пример употребления (см. рекомендации).

Гипонимыправить

Этимологияправить

Происходит от др.-греч.  «удар, след, отпечаток», далее из  «бить», далее из праиндоевр. *taup-, *staup- «бить, топтать». Англ. type — с 1470 г., заимств. через лат. tурus. Использованы материалы Online Etymology Dictionary Дугласа Харпера. См. Список литературы.

Значения атрибута

Значение Описание
button Определяет кнопку. Как правило, используется в основном совместно с языком программирования JavaScript для активации скрипта.
checkboxвключеновыключено Элемент графического пользовательского интерфейса, позволяющий пользователю управлять параметром с двумя состояниями — включено и ☐ выключено. Элемент также называют флажок, флаговая кнопка, чекбокс, галочка.
color Элемент управления для задания цвета (определяет палитру цветов).
date Элемент управления для ввода даты в формате DD.MM.YYYY (день, месяц и год). В элементе не указывается время.
datetime-local Элемент управления для ввода даты в формате DD.MM.YYYYThh:mm (день, месяц, год, часы и минуты). В элементе не указывается часовой пояс.
email Определяет поле для ввода адреса электронной почты.
file Элемент управления, который позволяет пользователю выбрать файл. Используйте атрибут accept HTML тега <input>, чтобы определить типы файлов, которые пользователь может выбрать.
hidden Элемент управления, который определяет скрытое поле ввода.
image Элемент управления, который определяет графическую кнопку «отправить форму» (значение submit). По аналогии с тегом <img> вы должны использовать атрибут src, чтобы задать путь к изображению и атрибут alt, чтобы указать альтернативный текст, если изображение не будет загружено по каким-то причинам. Размеры изображения задаются атрибутами width (ширина) и height (высота).
month Элемент управления для ввода месяца и года (Month YYYY). В элементе не указывается часовой пояс.
number Элемент управления для ввода числа с плавающей точкой.
password Определяет однострочное текстовое поле, предназначенное для ввода пароля (символы, введенные внутри поля скрываются). Используйте атрибут maxlength HTML тега <input>, чтобы задать максимальную длину значения, которое может быть введено в поле.
radioвыбраноне выбрано Элемент графического пользовательского интерфейса, который позволяет пользователю выбрать одно значение из предопределенной группы значений. Элемент, как правило, называют радиокнопка (radio button) или переключатель.
range Элемент управления для ввода номера (регулятор), в котором ввод точного значения не является важным. Этот тип управления использует следующие значения по умолчанию, если атрибуты не указаны:
  • min = «0»
  • max = «100»
  • value = min + (max — min) / 2, или min (если max меньше чем min)
  • step = «1»
reset Определяет кнопку сброса содержимого формы до значений, установленных по умолчанию.
search Определяет однострочное текстовое поле для ввода строки поиска
submit Определяет кнопку отправки формы
tel Определяет элемент управления для ввода телефонного номера.
text Определяет однострочное текстовое поле (по умолчанию имеет ширину в 20 символов).Это значение по умолчанию.
time Определяет элемент управления для ввода времени без указания часового пояса (hh:mm).
url Определяет поле для ввода абсолютного URL-адреса.
week Определяет элемент управления для ввода порядкого номера недели в году и самого года (Неделя NN, YYYY). В элементе не указывается часовой пояс.

Синтаксис типовSyntax for Types

В F# коде часто приходится записывать имена типов.In F# code, you often have to write out the names of types. Каждый тип имеет синтаксическую форму, и вы используете эти синтаксические формы в аннотациях типов, объявлениях абстрактных методов, объявлениях делегатов, сигнатурах и других конструкциях.Every type has a syntactic form, and you use these syntactic forms in type annotations, abstract method declarations, delegate declarations, signatures, and other constructs. При объявлении новой конструкции программы в интерпретаторе интерпретатор выводит имя конструкции и синтаксис для его типа.Whenever you declare a new program construct in the interpreter, the interpreter prints the name of the construct and the syntax for its type. Этот синтаксис может быть только идентификатором для определяемого пользователем типа или встроенным идентификатором, например для или , но для более сложных типов синтаксис более сложен.This syntax might be just an identifier for a user-defined type or a built-in identifier such as for or , but for more complex types, the syntax is more complex.

В следующей таблице показаны аспекты синтаксиса типов для F# типов.The following table shows aspects of the type syntax for F# types.

ТипType Синтаксис типаType syntax ПримерыExamples
тип-примитивprimitive type имя типаtype-name
агрегатный тип (класс, структура, объединение, запись, перечисление и т. д.)aggregate type (class, structure, union, record, enum, and so on) имя типаtype-name
Сокращенная форма типаtype abbreviation Тип-сокращенное имяtype-abbreviation-name
полный типfully qualified type пространства имен. Type-Namenamespaces.type-nameorormodules. Type-Namemodules.type-nameororпространства имен. modules. Type-Namenamespaces.modules.type-name
arrayarray Type-Name[] илиtype-name[] orтип-имя массиваtype-name array
двухмерный массивtwo-dimensional array Type-Nametype-name
трехмерный массивthree-dimensional array Type-Nametype-name
tupletuple Type-name1 * Type-имя2 …type-name1 * type-name2 … Например, имеет тип For example, has type
универсальный типgeneric type тип-параметр Generic-Type-Nametype-parameter generic-type-nameororGeneric-type-name<типа-parameter-list>generic-type-name<type-parameter-list>
сконструированный тип (универсальный тип с указанным аргументом типа)constructed type (a generic type that has a specific type argument supplied) Argument-аргумент типа Generic-Type-Nametype-argument generic-type-nameororGeneric-type-name<типа-argument-List>generic-type-name<type-argument-list>
тип функции с одним параметромfunction type that has a single parameter параметр-type1 -> возвращаемого типаparameter-type1 -> return-type Функция, которая принимает и возвращает имеет тип A function that takes an and returns a has type
тип функции с несколькими параметрамиfunction type that has multiple parameters параметр-type1 -> параметр-тип2 ->…-> return-Typeparameter-type1 -> parameter-type2 -> … -> return-type Функция, которая принимает и и возвращает типа A function that takes an and a and returns a has type
функция с более высоким порядком в качестве параметраhigher order function as a parameter (функция-тип)(function-type) имеет тип has type
delegatedelegate Делегат функции-типаdelegate of function-type
гибкий типflexible type имя типа ##type-name

С этим читают