Инструменты пользователя

Инструменты сайта


typescript

Вопросы и ответы при собеседовании по теме TypeScript

Вопросы

* Что такое TypeScript? Для чего это нужно и какие проблемы решает?
* Расскажите о следующих типах набора текста, их особенностях, плюсах и минусах:
    * слабый сильный;
    * статический / динамический;
    * сказку сделать былью;
    * структурный / именительный падеж;
* Какие типы набора текста используются в JavaScript и TypeScript?
* Как и для каких целей используются перечисленные ниже типы данных?
    * Логический
    * Число
    * Строка
    * Null и Undefined
    * Объект
    * Массив
    * Кортеж
    * Enum
    * Любой
    * Пустота
    * Никогда
    * Неизвестно
* Для чего используются утверждения типа? Зачем их избегать?
* Для чего нужны интерфейсы?
* Что такое псевдонимы типов? Зачем нам это нужно? Чем они отличаются от интерфейсов?
* Что делает `?` После имени свойства интерфейса или аргумента функции?
    * В чем разница между `x?: Number` и` x: number | undefined`?
* Зачем нужен постфикс `!`? Почему вам следует избегать этого?
* От каких интерфейсов можно наследовать? Какие ограничения накладывает наследование от класса?
* Как можно ввести класс на стороне статики и класс на стороне экземпляра?
* Может ли класс одновременно реализовать набор интерфейсов и наследовать от другого класса?
* Для чего нужны модификаторы свойств класса?
* В чем разница между абстрактными классами и обычными классами и интерфейсами?
* Можно ли объявить тип метода в интерфейсе, чтобы он возвращал контекст своего вызова?
  `` jsx
  interface ISomething {getThis (): // указать тип
  }
  class Something реализует ISomething {public getThis () {return this; }
  }
  ``
  • Для чего используются гибридные типы?
  • Для чего используются типы индекса?
    • Для чего нужен оператор keyof?
  • Для чего нужны сопоставленные типы? Как мне создать свой собственный сопоставленный тип?
  • Для чего нужны дженерики?
    • Какие встроенные универсальные типы?
    • Как ограничить возможные значения переменной типа?
    • Как ограничить возможные значения переменной типа значениями переменной другого типа?
    • Можно ли указать значение по умолчанию для переменной типа?
    • Исправьте ввод функции `filterBy` так, чтобы она:

1. первый аргумент принимает массив любых объектов;

      2. второй - это название поля, по которому выполняется фильтрация;
      3. третье - значение, которое должно содержать поле;
      4. вернул тип первого аргумента (исходный массив).
      `` jsx
      // исходная функция: function filterBy (input: Object [], propName: string, propValue: any): Object [] {return input.filter (item => item [propName] === propValue); }
      ``
      `` jsx
      // что должно произойти interface IEmployee {name: string; возраст: число; должность: «Программист» | «Бухгалтер» | «Дизайнер»; } сотрудники const: IEmployee [] = [{name: 'Mikle', возраст: 20, должность: 'Programmer'}, {name: 'Jordan', возраст: 25, должность: 'Designer'}, {name: 'Stive ', возраст: 34, должность:' Бухгалтер '}, {имя:' Том ', возраст: 19, должность:' Программист '}, {имя:' Боб ', возраст: 43, должность:' Программист '}, { имя: 'Mikle', возраст: 19, должность: 'Программист'}, {имя: 'Боб', возраст: 27, должность: 'Дизайнер'},];
      filterBy (сотрудники, «должность», «Программист»); // возвращаем IEmployee []
      filterBy (сотрудники, «фамилия», «Повар»); // ошибка, тип IEmployee не содержит 'surname'
      filterBy (сотрудники, 'должность', 'Тестировщик'); // ошибка, поле position не может содержать Tester,
      ``
  • Введите класс List, чтобы:

1. Конструктор класса принимает массив объектов с обязательным полем `id`;

           2. Метод addItem позволял добавлять только объект с типом аргумента конструктор;
           3. Метод `getList` вернул массив объектов с типом аргумента конструктора;
  
       Исходный класс
      `` jsx
      class List {частный список; конструктор (список) {this.list = список; } addItem (элемент) {this.list.push (элемент); } getList () {вернуть this.list; }}
      ``
      // Что должно получиться
      `` jsx
      интерфейс IGuest {логин: строка; пароль: строка; }
      const guest: IGuest [] = [{логин: 'гость', пароль: '123',}, {логин: 'пользователь', пароль: '123',}];
      const guestList = новый список <IGuest> (гости); // ошибка, в типе IGuest отсутствует поле id interface IUser {id: number; логин: строка; пароль: строка; }
      const пользователи: IUser [] = [{id: 1, логин: 'гость', пароль: '123',}, {id: 2, логин: 'пользователь', пароль: '123',}, {id: 3 , логин: 'author', пароль: '123',}];
      const usersList = новый список <IUser> (пользователи); // нормально usersList.addItem ({логин: 'гость', пароль: '123',}); // ошибка, отсутствует поле id usersList.addItem ({id: 3, login: 'admin',}); // ошибка, отсутствует поле пароля usersList.addItem ({id: 5, логин: 'guest', пароль: '123',}); // нормально const usersArray = usersList.getList (); // IUser [];
      ``

Ссылки

typescript.txt · Последнее изменение: 2020/09/04 23:28 — oleg