← Усі теми

Питання на співбесіді з TypeScript (Senior) з відповідями

75 запитань для співбесіди з теми TypeScript (Senior) - з правильними відповідями, поясненнями й посиланнями на документацію.

Пройти цей тест
  1. 1.Чи можна за strictFunctionTypes присвоїти (x: Dog) => void змінній типу (x: Animal) => void?
  2. 2.Чому strictFunctionTypes не діє на метод, оголошений як handle(x: Dog): void?
  3. 3.Чому дорівнює ToArray<string | number>, якщо type ToArray<T> = T extends any ? T[] : never?
  4. 4.Як вимкнути розподіл умовного типу по union?
  5. 5.Чому type IsNever<T> = T extends never ? true : false дає never для IsNever<never>?
  6. 6.Як реалізувати DeepPartial<T>?
  7. 7.Навіщо потрібні брендовані (branded) типи?
  8. 8.Як лишити в типі лише властивості-функції?
  9. 9.Що поверне Split<'a/b/c'>?
  10. 10.Що таке варіативні кортежі (variadic tuple types)?
  11. 11.Що дає модифікатор const у параметра типу (TS 5.0)?
  12. 12.Для чого утиліта NoInfer<T> (TS 5.4)?
  13. 13.Що робить infer N extends number в умовному типі?
  14. 14.У якому порядку писати перевантаження функції?
  15. 15.Як додати поле user до типу Request бібліотеки Express?
  16. 16.Чого вимагає прапорець verbatimModuleSyntax?
  17. 17.Що забороняє прапорець erasableSyntaxOnly (TS 5.8)?
  18. 18.Навіщо Project References (references, composite)?
  19. 19.Чим ризикує ввімкнення skipLibCheck: true?
  20. 20.Як знайти причину повільної перевірки типів у великому проєкті?
  21. 21.Чи можна передати readonly string[] у функцію, що приймає string[]?
  22. 22.Що дає тип this, що повертається, у методі класу?
  23. 23.Для чого анотації варіантності in і out у параметрів типу (TS 4.7)?
  24. 24.Чому шаблонний тип ` ${A}-${B}-${C} ` із трьох великих union може спричинити помилку?
  25. 25.Як працює трюк UnionToIntersection?
  26. 26.Чому Record<Status, string> корисніший за { [k: string]: string } для словника за статусами?
  27. 27.Що змінилося у виведенні предикатів типу в TS 5.5?
  28. 28.Для чого оголошення using (TS 5.2)?
  29. 29.Що поверне (typeof users)[number], якщо users: User[]?
  30. 30.Що дає mapped type { [K in keyof T]: Box<T[K]> }, якщо T - кортеж [string, number]?
  31. 31.Як отримати тип елемента Set<T> або Map<K, V> зі значення?
  32. 32.Навіщо ключове слово declare?
  33. 33.Як перевірити тип у тестах, щоб отримати помилку, якщо помилки компіляції НЕ буде?
  34. 34.Коли виправдане подвійне твердження x as unknown as T?
  35. 35.Чому тип Function краще не використовувати для колбеків?
  36. 36.Чому для a: { x: string } | { y: number } не можна написати a.x?
  37. 37.Що змінює прапорець exactOptionalPropertyTypes?
  38. 38.Що поверне keyof (A | B), якщо A = { id; name }, B = { id; price }?
  39. 39.Як увімкнути перевірку типів у JS-файлах без переведення на TS?
  40. 40.Як типізувати параметр, що приймає конструктор абстрактного класу?
  41. 41.Чи зберігається звуження змінної let усередині колбека?
  42. 42.Що таке гомоморфний mapped type і що він зберігає?
  43. 43.Як типізувати Promise.all-подібну функцію над кортежем промісів?
  44. 44.Чому функції-експорти в бібліотеці радять анотувати типом, що повертається?
  45. 45.Чим isolatedDeclarations (TS 5.5) корисний для монорепозиторіїв?
  46. 46.Чим T extends object відрізняється від T extends {} в обмеженні дженерика?
  47. 47.Чому інтерфейс розширюється швидше для компілятора, ніж перетин?
  48. 48.Як типізувати редʼюсер, щоб payload залежав від type дії?
  49. 49.Що поверне T[keyof T] для T = { a: string; b: number }?
  50. 50.Для чого використовується declare module '*.svg'?
  51. 51.Чому це компілюється і де діра в надійності?
  52. 52.Що дає усунення хвостової рекурсії для умовних типів (TS 4.5)?
  53. 53.Як витягти параметри маршруту з рядкового типу шляху?
  54. 54.Як типобезпечний builder накопичує інформацію у своєму типі?
  55. 55.У TypeScript немає типів вищого роду. Як бібліотеки емулюють F<A>, де F узагальнений?
  56. 56.Що означає помилка «The inferred type of 'x' cannot be named without a reference to ...»?
  57. 57.Навіщо dual ESM/CJS-пакету окремі файли декларацій (наприклад, .d.mts і .d.cts)?
  58. 58.Що дає rewriteRelativeImportExtensions (TS 5.7)?
  59. 59.Яка головна мета нативного (Go) порту TypeScript?
  60. 60.З чим допомагають правила typescript-eslint no-unsafe-*?
  61. 61.Що потрібно assertion-функції, щоб її виклик звужував тип?
  62. 62.Що робить предикат this is у методі класу?
  63. 63.Що таке { id: string } & { id: number }?
  64. 64.Як отримати тип експортів модуля, не імпортуючи його значень?
  65. 65.Чому перевірка зайвих властивостей пропускає помилку в цьому випадку?
  66. 66.Чому велике об'єднання рядкових літералів може сповільнити компілятор?
  67. 67.Чому змінна let може втрачати звуження всередині колбека, а const його зберігає?
  68. 68.Чому публічній бібліотеці варто уникати enum в API?
  69. 69.Як типізувати функцію, що зберігає точні ключі переданого об'єкта, перетворюючи значення?
  70. 70.Як не дати споживачам залежати від внутрішніх типів вашої бібліотеки?
  71. 71.Яку проблему може спричинити strictNullChecks: false в одному пакеті монорепозиторію?
  72. 72.Чому явні обмеження generic кращі за приведення типів усередині узагальненої функції?
  73. 73.Що повертає Object.freeze з погляду типів?
  74. 74.Як зробити, щоб перевірка повноти дискримінованого об'єднання ловила пропущений випадок і в шарі даних?
  75. 75.Чим ризиковано типізувати API-клієнт самими generic'ами, на кшталт get<T>(url): Promise<T>?