10 популярных вопросов на собеседовании по TypeScript (с краткими ответами)

Автор оригинала: Jeroen Ouwehand
  • Перевод


1. Для чего нужен тип «Omit»?


Ответ: Это новый тип, в котором можно указать свойства, которые будут исключены из исходного типа.


Пример:


type Person = { name: string; age: number; location: string; };
type QuantumPerson = Omit<Person, 'location'>; // Аналогично следующей строке
QuantumPerson = { name: string; age: number; };

2. Когда нужно использовать ключевое слово «declare»?


Ответ: При использовании библиотеки JavaScript, не объявленной в вашем TypeScript-проекте.


Пример:


declare const libraryName; 

3. Как автоматически получить файлы declaration?


Ответ: Установить опцию компилятора на true в файле tsconfig.json


Пример:


{
"compilerOptions": {
    ...
    "declaration": true,
  }
} 

4. Как перегрузить функцию?


Ответ: Надо использовать то же имя функции над оригинальной функцией без скобок {} и изменить число и типы аргументов и/или тип возвращаемого значения.


Пример:


function add(x: string, y: string): string;
function add(x: number, y: number): number {
  return x + y;
} 

5. Как сделать все свойства интерфейса необязательными?


Ответ: Используйте тип Partial


Пример:


interface Person {
  name: string;
  age: number;
}

type PartialPerson = Partial<Person>; // Аналогично следующему коду

linesinterface PartialPerson {
  name?: string;
  age?: number;
}

6. К чему можно применять декораторы?


Ответ: Классы, свойства, методы и аргументы метода.


Пример:


@MyClassDecorator
export class Person { 
    …
    @MyPropertyDecorator myProperty: string;
}

7. Для чего нужен тип «Record»?


Ответ: Он позволяет создавать типизированную мапу


Пример:


let Person = Record<string, number> = {};
Person.age = 25;

8. Как можно получить доступ к классам вне модуля, в котором они определены?


Ответ: Используйте ключевое слово export перед именем класса.


Пример:


export class Person {}

9. Когда используется ключевое слово «unknown»?


Ответ: Когда вы не хотите использовать ключевое слово any и/или заранее не знаете точный тип, но хотите назначить его позже.


Пример:


let person: unknown = 'John';
if (typeof person === string) {
  let name: string = person;
} 

10. Что такое «.map» файл, как и зачем его использовать?


Ответ: Map-файл — это файл карты исходников, который можно использовать при выполнении отладки. Его можно сгенерировать, установив опцию компилятора sourceMap в true в файле tsconfig.json


Пример:


{
"compilerOptions": {
    ...
    "sourceMap": true,
  }
} 
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 12

    +5
    4. Как прегрузить функцию?
    Никак. Альтернативные сигнатуры для одного и того же тела функции можно назвать «перегрузкой» с оооочень большой натяжкой.
      +12

      Странный набор вопросов. Я юзаю typescript с первых релизов — лет 5 наверное. Никогда бы не пришло в голову такое спрашивать на собесах. Да я бы и сам не ответил наверное — что-то не использовал, где-то формулировки вопросов загадочные.


      Вообще, TS не 100% проектов юзают. Я беру ребят с хорошим JS, а TS они учат по ходу дела. По TS на собесах вообще не спрашиваю.
      Но если уж захочется по гонять по TS — проще попросить затипизировать какой-нибудь код.
      Впрочем, я и по JS прошу код писать, а не вопросы по теории задаю.

        +1

        Полностью согласен. Вопросы, представленные выше, не решают задач собеседования от слова "совсем". За условный час, отведенный на собес, сложно узнать о человеке достаточное количество информации. Собеседование — это стресс, для обоих сторон. Кандидат может не знать какой-то детали или просто ее забыть. Но при этом может быть отличным разработчиком, подкованным "в целом". Поэтому стараюсь подходить к собесу примерно так: давайте расслабимся, мы расскажем, что мы тут делаем, ты, если тебе все еще будет интересно, расскажешь, что ты умеешь, делаешь и что можешь предложить. Потом попробуем что-нибудь поделать, а затем выпьем чай/кофе при желании, подумаем и зададим друг другу вопросы, которые возникнут. Однажды мы так разговаривали с кандидатом и я понял, что мне больше нет смысла задавать вопросы, которые он предугадывает, а я предугадываю его ответ) И вот сейчас я думаю, если бы я начал с каких-нибудь дурацких вопросов, какого бы классного коллегу я бы потерял...

          +1
          Я обычно собесы начинал с вопроса — расскажите о каком-нибудь своем наиболее удачном проекте, или наиболее удачных ваших архитектурных решениях. И вообще — стараюсь спрашивать кандидата только в тех областях, где он силен, а если вижу что начинает плавать — значит и не стоит туда ковырять, золота не добудешь, а настроение и себе и ему испортишь. По сильным сторонам человека можно больше разузнать о нем, чем по слабым. Если конечно нет цели взять на измену :)
          –1
          Код могут проверить только достаточно опытные программисты, а сличить ответы с образцовыми — и люди со знанием лишь основ программирования, чей труд стоит дешевле. Поэтому, если соискателей постоянно бывает очень много, первичный отсев дешевле проводить с помощью теоретических вопросов.
          0
          function add(x: string, y: string): string;
          function add(x: number, y: number): number {
          return x + y;
          }
          У меня был другой случай — входные парамеры идентичные, отличается только тип результата. Первая функция возвращает Result, вторая Promise<Result>, то есть асинхронная. Перегрузка не сработала, пришлось писать 2 функции с разными именами. А жаль, было бы красиво.
            +1
            Ой, все сработало, я счастлив, люблю TypeScript.
            export interface DBReader {
                next?(): Document | false
                next?(): Promise<Document | false> 
            }   
            
              +3
              Но если возвращаемый тип не зависит от входных типов, то может быть стоило написать
              : Promise<Document | false> | Document | false
              ?
            0
            типизированную мапу

            Если мне не изменяет память, то по-украински как-то так же звучит слово обезьяна…

              0
              Мапа — карта, мавпа — обезьяна
                0
                Я тоже не понял что за слово. На иврите мапа === карта. Тут не совсем понятно что — писатель имел ввиду.
              0
              Совершенно рандомные вопросы. Почему именно они были выбраны? Как будто кто-то просто наугад брал темы из ts документации.

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

              Самое читаемое