35
Typescript! Зачем? Московский клуб программистов 2020

Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Typescript!Зачем?

Московский клуб программистов 2020

Page 2: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Стариченко Никита

●●

●LinkedIn: www.linkedin.com/in/nikita-starichenko/Telegram: @nikita_starichenko

Page 3: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Vanilla JS

Page 4: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Modern Frontend

Page 5: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Modern JS

Page 6: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

А что плохого?1. Ошибки в данных2. Ошибки в запросах3. Поддерживаемость в больших проектах

Page 7: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Чуть нагляднее

Page 8: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

TypescriptДобавим немножко типов

Page 9: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

ПримерКакие поля могут быть в этом объекте? Теперь уже с типами:

Page 10: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Система типов TypeScriptЕсть сходства с C#. Есть интерфейсы. Есть классы с публичными и приватными методами и полями.

Page 11: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Система типов TypeScript. Вывод типовВ результатах работы функции:

Page 12: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Система типов TypeScript. Вывод типовВ параметрах:

Page 13: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Система типов TypeScript. Вывод типовНеявно создаются типы для всех объектов:

Page 14: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Система типов TypeScriptТипы можно определять разными способами:

Результат вроде одинаковый. В чем разница и как правильно?

Page 15: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Система типов TypeScript

Interface

Несколько определений интерфейса сливаютсяC#

Page 16: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Система типов TypeScriptClass

C#

Page 17: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Система типов TypeScript

Type

F#

Page 18: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Interface● описывает структуру объекта● не существует в рантайме● может расширять другой

интерфейс или даже класс● несколько объявлений

мержатся● имя видно на этапе

компиляции

Class● описывает структуру объекта● существуют и в рантайме и на

этапе компиляции● может реализовывать

интерфейсы● может быть унаследован от

другого класса

Type● просто синоним для другого

типа● может быть вычисляемым● не существует в рантайме● не может наследовать или

быть унаследованным

Page 19: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Но создавать свой тип под каждую модель очень долго, можно побыстрее?Да, вот так:

1. Пересечения2. Объединения3. Generics

Page 20: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Алгебраическая система типов

JS

C#

Page 21: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Система типов TypeScript. Пересечения типовТипы могут быть составными

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

Page 22: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

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

Page 23: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Система типов TypeScript. GenericsПо сути - это параметры типов. Как и в C# можно создавать открытые обобщенные типы, а специализировать в любой момент.

Page 24: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Система типов TypeScript. GenericsПомимо генерализации, можно делать вычисления. Generic типы можно представлять себе как функции с параметрами.

Например, Identity тип (который возвращает тип параметра, не меняя его):

Page 25: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Система типов TypeScript. GenericsПомимо генерализации, можно делать вычисления. Generic типы можно представлять себе как функции с параметрами.

Простой пример c if:

DefinitelyFalse - это не конкретное значение, это тоже тип, который может принимать только одно константное значение (в данном случае false)

Page 26: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Система типов TypeScript. GenericsПример посложнее:

Page 27: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Система типов TypeScript. GenericsЧасто используемые:

● Partial - помечает все поля типа как необязательные● Readonly - помечает все поля как только для чтения● Record - возвращает массив ключ-значение, как Dictionary

Page 28: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Partial - помечает все поля типа как необязательные

Page 29: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Readonly - помечает все поля как только для чтения

Page 30: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Record - возвращает массив ключ-значение, как Dictionary

Page 31: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Система типов TypeScript. GenericsДругие часто используемые. Чтобы не копипастить из проекта в проект.

https://github.com/sindresorhus/type-fest

Page 32: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Ну и что, стало лучше? Да.1. Намного больше ошибок выявляется на ранней

стадии2. Поддержка IDE упрощает навигацию по коду и

поддержку3. Рефакторинг намного проще

Page 33: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Популярность Typescript

6000+ поддерживаемых библиотек

Page 34: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

Что использовать?

Javascript:1. Легче изучить2. Меньше кода3. Быстрая разработка на старте4. Хорош для маленьких проектов

Typescript:1. Меньше ошибок при разработке2. Код понятнее и лучше читается3. Намного проще поддерживать код4. Быстрая разработка в продакшене5. Хорош для больших проектов

Page 35: Typescript! · 2020. 12. 18. · Система типов TypeScript. Generics Часто используемые: Partial - помечает все поля типа как необязательные

1. В больших проектах начинают появляться ошибки и процесс разработки/рефакторинга усложняется

2. Typescript добавляет типизацию к JS. Подсвечивает большинство ошибок JS3. Позволяет очень гибко работать с типизацией. Создавать типы на лету.4. Упрощает поддержку кода на проектах5. Упрощает жизнь!

Итог:

Список литературы1. https://basarat.gitbooks.io/typescript/content/ - книга, которую пишет

сообщество. Самая актуальная по языку2. https://www.typescriptlang.org/ - официальный сайт3. https://github.com/microsoft/TypeScript - сам проект

LinkedIn: www.linkedin.com/in/nikita-starichenko/ Telegram: @nikita_starichenko