10 популярных вопросов на собеседовании по TypeScript (с краткими ответами)
1. Для чего нужен тип «Omit»?
Ответ: Это новый тип, в котором можно указать свойства, которые будут исключены из исходного типа.
Пример:
2. Когда нужно использовать ключевое слово «declare»?
Ответ: При использовании библиотеки JavaScript, не объявленной в вашем TypeScript-проекте.
Пример:
3. Как автоматически получить файлы declaration?
Ответ: Установить опцию компилятора на true в файле tsconfig.json
Пример:
4. Как перегрузить функцию?
Ответ: Надо использовать то же имя функции над оригинальной функцией без скобок <> и изменить число и типы аргументов и/или тип возвращаемого значения.
Пример:
5. Как сделать все свойства интерфейса необязательными?
Ответ: Используйте тип Partial
Пример:
6. К чему можно применять декораторы?
Ответ: Классы, свойства, методы и аргументы метода.
Пример:
7. Для чего нужен тип «Record»?
Ответ: Он позволяет создавать типизированную мапу
Пример:
8. Как можно получить доступ к классам вне модуля, в котором они определены?
Ответ: Используйте ключевое слово export перед именем класса.
Пример:
9. Когда используется ключевое слово «unknown»?
Ответ: Когда вы не хотите использовать ключевое слово any и/или заранее не знаете точный тип, но хотите назначить его позже.
Пример:
10. Что такое «.map» файл, как и зачем его использовать?
Typescript omit что это
TypeScript provides several utility types to facilitate common type transformations. These utilities are available globally.
Constructs a type with all properties of Type set to optional. This utility will return a type that represents all subsets of a given type.
This utility is useful for representing assignment expressions that will fail at runtime (i.e. when attempting to reassign properties of a frozen object).
Constructs a type by picking all properties from Type and then removing Keys (string literal or union of string literals).
Constructs a tuple or array type from the types of a constructor function type. It produces a tuple type with all the parameter types (or the type never if Type is not a function).
Extracts the type of the this parameter for a function type, or unknown if the function type has no this parameter.
This utility does not return a transformed type. Instead, it serves as a marker for a contextual this type. Note that the noImplicitThis flag must be enabled to use this utility.
In the example above, the methods object in the argument to makeObject has a contextual type that includes ThisType and therefore the type of this in methods within the methods object is < x: number, y: number >& < moveBy(dx: number, dy: number): number >. Notice how the type of the methods property simultaneously is an inference target and a source for the this type in methods.
Intrinsic String Manipulation Types
To help with string manipulation around template string literals, TypeScript includes a set of types which can be used in string manipulation within the type system. You can find those in the Template Literal Types documentation.
The TypeScript docs are an open source project. Help us improve these pages by sending a Pull Request ❤
Новые возможности TypeScript, повышающие удобство разработки
TypeScript, во многих отношениях, больше похож не на язык программирования, а на мощный инструмент для линтинга и документирования кода, который помогает писать более качественные JavaScript-программы.
Одна из наиболее заметных сильных сторон TypeScript — это поддержка некоторых из новейших возможностей, описанных в спецификации ECMAScript. Когда разработчик обновляется до новой версии TypeScript, это означает, что в его распоряжении оказываются и новые возможности JavaScript. Причём, использование этих возможностей не означает потенциальных проблем с совместимостью. TypeScript, помимо внедрения новейших возможностей JavaScript, заметен ещё и тем, что создатели языка постоянно представляют сообществу TS-программистов что-то новое, призванное повысить удобство работы. Сюда входят, например, вспомогательные инструменты для рефакторинга кода, средства для переименования сущностей и для поиска мест, где они используются в программах.
В материале, перевод которого мы сегодня публикуем, будут рассмотрены некоторые интересные свежие возможности TypeScript. Для того чтобы ознакомиться с полным списком новшеств TypeScript — загляните сюда.
Иммутабельные объекты и массивы
Повышение удобства работы с параметрами, являющимися массивами, предназначенными только для чтения
Повышение удобства работы с иммутабельными переменными с использованием конструкции as const
Используя Readonly и ReadonlyArray можно указать TypeScript на то, что система должна рассматривать объектные сущности так, как будто они являются по-настоящему иммутабельными. Это значит, что каждый раз, когда в коде будет делаться попытка изменения такой сущности, будет выдаваться сообщение об ошибке.
Вспомогательный тип Omit
В TypeScript существует несколько вспомогательных типов, которые позволяют легко отображать существующие типы на новые, или по условию устанавливать тип, основываясь на других типах.
Новые возможности JavaScript, поддерживаемые TypeScript
Когда предложения по новым возможностям JavaScript достигают 4 стадии согласования, их принято считать частью следующей версии языка. Правда, это не означает, что такими возможностями тут же можно воспользоваться в JavaScript, так как их поддержка должна быть реализована в соответствующих средах. Приложение должно иметь доступ к подобным возможностям везде, где предполагается его нормальная работа.
▍Проверка на null и undefined
▍Опциональные последовательности
▍Приватные поля классов
Сейчас JavaScript поддерживает приватные поля, предложение по приватным методам находится на третьей стадии согласования. В настоящее время модификатор private и знак # в имени поля нельзя использовать совместно. Оба подхода могут пригодиться в ходе разработки, и то, какой именно выбрать, зависит от программиста. Вот подкаст, в котором обсуждают новый синтаксис объявления приватных полей.
▍Использование ключевого слова await на верхнем уровне кода
Один из случаев, когда используют промисы, а не async/await — это вызов асинхронного метода за пределами асинхронной функции. Например — на верхнем уровне кода модуля или приложения. В качестве обходного пути в такой ситуации можно предложить создание асинхронного немедленно вызываемого функционального выражения (IIFE, Immediately Invoked Function Expression) и выполнение асинхронного кода внутри такого выражения.
Улучшенная среда для экспериментов с TypeScript
Это нельзя назвать новой возможностью TypeScript, но, учитывая то, что мы здесь говорим о TypeScript как об инструменте, TypeScript Playground можно назвать эффективным инструментом для быстрой проверки каких-либо TypeScript-конструкций и просмотра JavaScript-кода, в который превращаются эти конструкции. Большинство примеров, приведённых здесь, проверены именно в TypeScript Playground. Теперь эта среда поддерживает возможность выбора конкретной версии TypeScript (в том числе она поддерживает и бета-версии). В её состав включены несколько примеров, которые помогут начать работу с TypeScript новичкам.
Итоги
Уважаемые читатели! Какие новые возможности TypeScript кажутся вам наиболее интересными?
Замечательные новые фичи TypeScript 3.5
Jan 25, 2020 · 3 min read
Новые фичи включают в себя:
Увеличение скорости
Вспомогательный тип Omit
Вспомогательный тип Omit позволяет создавать новые типы на основе существующих методом исключения некоторых свойств из исходного типа.
Например, тип Person определен следующим кодом:
Это то же самое, что:
Улучшенные проверки избыточных свойств в типах c объединением
До TypeScript 3.5 проверки избыточных свойств в некоторых случаях не замечали лишние свойства. В объединениях TypeScript разрешал свойство с тем же именем, что и у типа с объединением, но с типом, отличным от того, что задан в определении. Например:
М ы можем задать address для чего-то, не являющегося строкой, что, в общем-то, не должно быть разрешено.
Это исправлено в TypeScript 3.5. Сейчас address должен быть строкой, поскольку он указан как строка.
Это добавляет больше гибкости микшированию и сопоставлению библиотек сторонних производителей. Теперь глобальные переменные, объявленные библиотеками, можно использовать даже внутри модулей.
Умная проверка типа с объединением
До TypeScript 3.5 мы бы получили ошибку в определении и назначении переменной следующего типа объединения:
До 3.5 done был бы распознан как обладающий литеральным типом со значением, а не булевым.
Вывод типа высшего порядка из обобщенных конструкторов
Мы создаем обобщенные конструкторы с помощью следующей функции:
Если у нас есть следующий код:
Заключение
TypeScript 3.5 умнее и быстрее. Он может выводить типы, сформированные композицией конструкторов, проходя по цепочке композиции. Проверка избыточных свойств проводится для типов с объединением, чего не было в более ранних версиях.
И, наконец, вспомогательный тип Omit для создания новых типов из существующих с удалением некоторых свойств.
Замечательные новые фичи TypeScript 3.5
Новые фичи включают в себя:
Увеличение скорости
Вспомогательный тип Omit
Вспомогательный тип Omit позволяет создавать новые типы на основе существующих методом исключения некоторых свойств из исходного типа.
Например, тип Person определен следующим кодом:
Это то же самое, что:
Улучшенные проверки избыточных свойств в типах c объединением
До TypeScript 3.5 проверки избыточных свойств в некоторых случаях не замечали лишние свойства. В объединениях TypeScript разрешал свойство с тем же именем, что и у типа с объединением, но с типом, отличным от того, что задан в определении. Например:
Мы можем задать address для чего-то, не являющегося строкой, что, в общем-то, не должно быть разрешено.
Это исправлено в TypeScript 3.5. Сейчас address должен быть строкой, поскольку он указан как строка.
Флаг —allowUmdGlobalAccess
Это добавляет больше гибкости микшированию и сопоставлению библиотек сторонних производителей. Теперь глобальные переменные, объявленные библиотеками, можно использовать даже внутри модулей.
Умная проверка типа с объединением
До TypeScript 3.5 мы бы получили ошибку в определении и назначении переменной следующего типа объединения:
До 3.5 done был бы распознан как обладающий литеральным типом со значением, а не булевым.
Вывод типа высшего порядка из обобщенных конструкторов
Мы создаем обобщенные конструкторы с помощью следующей функции:
Если у нас есть следующий код:
Заключение
TypeScript 3.5 умнее и быстрее. Он может выводить типы, сформированные композицией конструкторов, проходя по цепочке композиции. Проверка избыточных свойств проводится для типов с объединением, чего не было в более ранних версиях.
И, наконец, вспомогательный тип Omit для создания новых типов из существующих с удалением некоторых свойств.



