Рубрики
Без рубрики

Сделайте свои комментарии React Components Great с Skyscripts Mapaped и условные типы

By Deepu K Sasidharan Составьте своими комментариями React Components Great с Skyscript Cappted и условными типами, вероятно, слышали о TeampScript. Возможно, вы слышали, как кто-то утверждает, насколько великий тип безопасности. Tymdercript отлично. Как тот, кто ненавидит трансстата своего кода, я бы определенно сделал это с помощью TeameScript, если I

Автор оригинала: FreeCodeCamp Community Member.

Дипельку К Сасидхаран

Вы, наверное, слышали о TeampScript. Возможно, вы слышали, как кто-то утверждает, насколько великий тип безопасности.

Tymdercript отлично. Как кто-то, кто ненавидит транспортировки своего кода, я бы определенно сделал это с помощью TeameScript, если бы мне пришлось. Так много было сказано о TeampScript, и на самом деле ничего нового я могу добавить. Но я верю, что безопасность типа не все о том, чтобы сделать ваш код уродливым с определениями типа повсюду. Итак, как мы можем написать Seafe-Safe Code без необходимости объявлений типа мусора везде?

Введите вывод и расширенные функции, такие как производные и динамические типы, являются ответом. Редакторы и IDES, которые мы используем, достаточно умные, чтобы обрабатывать код с выведенным типом, изящно без нас, чтобы увидеть типы все время визуально. (Конечно, они все обычно показывают вам тип, когда вы наведите курсор на предполагаемый тип.)

Tymdercript имеет очень хороший тип вывода. Как правило, вы всегда можете начать, не объявляя тип для любой переменной и посмотрите, подчиняется ли компилятор. С современными редакторами, как VSCode, вы можете увидеть это немедленно. Так что установите свой TSConfig в строгий режим. Затем начните объявлять типы, когда компилятор жалуется.

Кроме того, Typeycript 2.1 и 2.8 представили кучу прохладных типов поиска. Теперь вы можете динамически определить типы вывода, используя различные методы, такие как типы пересечений, типы объединения, типы индекса, отображаемые типы и условные типы.

Типы индекса

Типы индексов позволяют нам проверять свойства и типы интерфейса или типа динамически, используя Keyof T. ( Оператор запроса типа индекса) и T [к] ( Индексированный оператор доступа ). Давайте возьмем интерфейс ниже, например.

interface Person {
  name: string;
  age: number;
  address: string;
  sayHi: (msg: string) => string;
}

Keyof T Оператор получает профсоюзный тип всех ключевых названий типа T И, следовательно, Ключ человека даст нам «Имя» | «Возраст» | «Адрес» | Сайхи ' в результате.

T [k] Оператор получает тип для предоставленного ключа. Человек [«Имя»] приведет к строка и Человек [ Keyof Человек] приведет к строка |. Номер |. ((Msg: String) => Строка) Отказ

Сопоставлены типы

Давайте посмотрим, какие сопоставлены типы. Покажем, у нас есть интерфейс ниже для человека.

interface Person {
  name: string;
  age: number;
  address: string;
  sayHi: (msg: string) => string;
}

Теперь в каждом проекте это почти всегда общие требования иметь вариации определенного интерфейса. Например, скажем, нам нужна версия только для чтения человека, как показано ниже.

interface ReadonlyPerson {
  readonly name: string;
  readonly age: number;
  readonly address: string;
  readonly sayHi: (msg: string) => string;
}

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

type ReadonlyPerson  = Readonly

Если вы наведите курсор на Readonlyperson Тип вы можете увидеть предполагаемый тип, как показано ниже.

Это круто, верно? Теперь мы можем создавать типы из существующих типов и не нужно беспокоиться о том, чтобы держать их в синхронизации. Как это работает, что делает Readonly делать? Давайте посмотрим на сопоставленный тип.

type Readonly = {
    readonly [K in keyof T]: T[K];
}

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

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

type ReadonlyNullablePerson = {
    readonly [P in keyof Person]: Person[P] | null;
}

Давайте сделаем это общедоступным, чтобы его можно было использовать с любым интерфейсом.

type ReadonlyNullable = {
    readonly [K in keyof T]: T[K] | null;
}

type ReadonlyNullablePerson  = ReadonlyNullable

TeampScript включает в себя Readonly С Частичный , Pick а также Запись как встроенные отображаемые типы. Выбор и запись могут быть использованы, как показано ниже, проверьте их в своем редакторе, чтобы увидеть, какие типы они производят.

type PersonMinimal = Pick

type RecordedPerson = Record<'name' | 'address', string>

Для каждого другого случая использования вы можете создать свои собственные сопоставленные типы.

Условные типы

Давайте посмотрим на пример.

type Foo = T extends U ? string : boolean

interface Me {}
interface You extends Person {}

type FooBool = Foo // will result in boolean
type FooString = Foo // will result in string

Тип динамически выводится из Foo будет либо строка или логический В зависимости от того, от того, от чего продлен первый универсал.

Давайте посмотрим, как мы можем смешивать условные типы с сопоставленными типами, чтобы вывести новый тип от человека, который включает только нефункциональные свойства.

type NonFunctionPropNames = {
  [K in keyof T]: T[K] extends Function ? never : K
}[keyof T];

type NonFunctionProps = Pick>

type PersonProps = NonFunctionProps

// Produces the below type
// type PersonProps = {
//     name: string;
//     age: number;
//     address: string;
// }

Сначала мы получим все нефункциональные имена свойств из интерфейса. Затем используйте Выберите Спопутанный тип, чтобы выбрать из интерфейса, чтобы сформировать новый интерфейс.

Teadncript предоставляет следующие встроенные условные типы:

  • Исключить – исключить из T Эти типы, которые назначаются на U .
  • Экстракт – Экстракт из T Эти типы, которые назначаются на U .
  • Ненужный – Исключить нулевой и undefined от T Отказ
  • Returntype – Получить тип возврата типа функции.
  • InstanceType – Получить тип экземпляра типа функции конструктора.

Давайте введем его в использование

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

Реагистрируйте компонент и редуктор Redux в ES6

Давайте увидим простой реактивный компонент с редуктором, написанным в ES6. Посмотрите на index.jsx В следующем коде песочница:

Как видите, мы используем библиотеку опоры для определения компонентов. Это не самый эффективный способ, поскольку он включает в себя значительные накладные расходы во время развития. Это не обеспечивает безопасность полного типа в любом случае.

Актуальный компонент и редуктор Redux в Teadercript

Теперь давайте конвертируем этот простой пример в Teamescript, чтобы он был безопасен. Посмотрите на index.tsx В следующем коде песочница:

Как видите, код теперь более безопасен. Это также гораздо больше, даже без пропорционной библиотеки и всякий вывод типа.

Реагистрируйте компонент и редуктор Redux в Teadercript с расширенными типами

Теперь давайте применим продвинутые типы, которые мы научились сделать этот пример менее Verbose и даже более безопасным типом. Посмотрите на index.tsx В следующем коде песочница:

Как вы можете видеть, мы использовали Readly и Returntype Сопоставление наряду с некоторыми другими методами вывода на вынос, чтобы написать более типовой безопасную, но менее многолетнюю версию компонента.

Заключение

Если вы используете реагирование с помощью Tearscript, то это некоторые из методик, которые вы должны подать заявку. Если вы рассматриваете систему типа для реагирования, то не смотрите не дальше, чем в Typscript. Он имеет отличные особенности, отличные инструменты, отличный IDE/редактор поддержки и удивительное сообщество.

Я дал разговор на TymentScript для devoxx 2018, и вы можете увидеть видео и слайды, если вам нравится здесь.

Проверьте мою книгу « Полное развитие стека с Jipster » на Amazon а также Пакет Если вам нравится узнать о полном развитии стека с удивительным стеком.

Если вам нравится Jivster, не забудьте дать ему звезду на Github Отказ

Если вам нравится эта статья, пожалуйста, оставьте некоторые хлопья (вы знали, что вы можете хлопать несколько раз?)

Вы можете следовать за мной на Twitter и LinkedIn Отказ

Оригинал: “https://www.freecodecamp.org/news/make-react-components-great-again-with-typescript-mapped-and-conditional-types-fa729bfc1a79/”