Typescript поддерживает дженерики, также называемые параметрами типа. Вы можете выполнять ряд операций с параметрами типа и возвращать новый тип.类型编程
.
Поскольку в программировании типов сложно реализовать некоторую логику, его в шутку называют类型体操
.
Сообщество использует типы Typescript для реализации интерпретаторов Лиспа, реализации шахмат и других случаев (вы можете найти их в Zhihu), чего достаточно, чтобы показать, что типы Typescript могут реализовывать различную сложную логику.
Итак, гимнастика типа Typescript такая сложная, есть ли какой-нибудь быстрый способ ее освоить?
Действительно, я обобщил некоторые упражнения, которые могут быстро улучшить уровень гимнастики типа ТС. Например, рутина, о которой я собираюсь рассказать сегодня...сопоставление с образцом.
Сопоставление шаблонов для типов Typescript
Мы знаем, что строки можно сопоставлять с образцом с помощью регулярных выражений, находить совпадающую часть, извлекать подгруппы, а затем использовать $1, $2 и т. д. для ссылки на совпадающие подгруппы.
Типы Typescript также могут выполнять сопоставление с образцом.
Например, чтобы извлечь тип значения Promise
Мы выполняем сопоставление с образцом для параметра входящего типа T через расширения, в котором часть значения должна быть извлечена, а локальная переменная R объявляется через класс вывода для ее сохранения. возвращает никогда, чтобы представить отсутствие совпадения.
Это сопоставление с образцом типа Typescript.
Обобщить:Сопоставление с образцом типов Typescript заключается в сопоставлении параметров типа с помощью расширений, а результат сохраняется в переменной локального типа, объявленной с помощью infer.Если он совпадает, извлеченный тип может быть получен из локальной переменной.
Насколько полезна эта процедура сопоставления с образцом? Давайте посмотрим на приложение в массивах, строках, функциях и т. д.
Сопоставление шаблонов для типов массивов
pop
pop должен удалить последний элемент, что может быть достигнуто путем сопоставления с образцом:
Мы извлекаем тип последнего элемента и тип предыдущего элемента посредством сопоставления с образцом, помещаем их в разные переменные с помощью infer, а затем создаем новый тип массива для возврата.
shift
Точно так же сдвиг должен удалить первый элемент, и он также реализован в аналогичном методе сопоставления:
Сопоставление шаблонов для строковых типов
trim
Обрезка заключается в удалении пробелов, табуляции и новых строк до и после, затем удалении следующих символов с помощью сопоставления с образцом и помещении их в новую переменную с помощью infer to return.
Сначала реализуйте TrimLeft:
Продолжайте рекурсию TrimLeft, если есть совпадение, пока не исчезнут предшествующие пробельные символы.
Затем реализуйте TrimRight:
Тогда их комбинация — это Trim:
replace
replace является частью строки замены.Вы можете извлечь подстроки до и после строки с помощью сопоставления с образцом, поместить их в разные переменные с помощью infer, а затем сформировать новую строку с замененной частью.
Схема сопоставления для типов функций
Тип параметра
Тип параметра получается путем сопоставления с образцом, чтобы получить часть параметра, поместить ее в переменную, объявленную infer, и вернуть ее.
тип возвращаемого значения
Удаление типа возвращаемого значения также означает получение части возвращаемого значения посредством сопоставления с образцом, помещение его в переменную типа, объявленную infer, и возврат.
Суммировать
Программирование типов заключается в выполнении ряда операций над параметрами типа (универсальные шаблоны) и возврате нового типа, также известном как гимнастика типов.
Типовая гимнастика может реализовать много сложной логики, и ей сложно научиться, но, освоив некоторые упражнения, вы сможете освоить ее быстро.
Наиболее распространенной из этих подпрограмм является сопоставление с образцом.Подобно сопоставлению строк и извлечению подстрок, типы также можно использовать для сопоставления параметров типа с помощью расширений и сохранения извлекаемой части в переменной локального типа, объявленной с помощью infer.
Процедура сопоставления с образцом параметров типа имеет большое количество применений в строковых типах, типах массивов, типах функций и т. д. Освоение этой процедуры может повысить уровень многих упражнений с типами.