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