Какие интересные задачи решал с помощь TypeScript

Ответ

Одна из интересных задач — реализация строгой типизации для Redux-стора. TypeScript позволяет избежать ошибок в экшенах и редьюсерах. Например, с помощью discriminated unions можно гарантировать, что редьюсер обрабатывает только корректные экшены:

type Action =
  | { type: 'ADD_TODO'; payload: string }
  | { type: 'TOGGLE_TODO'; id: number };

function todosReducer(state: Todo[], action: Action): Todo[] {
  switch (action.type) {
    case 'ADD_TODO': // Ошибка TS: такого типа нет в Action
      return [...state, { text: action.payload, completed: false }];
    case 'TOGGLE_TODO': // Ошибка TS
      return state.map(todo => todo.id === action.id ? {...todo, completed: !todo.completed} : todo);
    default:
      return state;
  }
}

Также работал с динамической типизацией API-ответов, используя дженерики и type guards для безопасного парсинга данных.

Ответ 18+ 🔞

Да ты посмотри, какая хуйня интересная вырисовывается — строгая типизация для Redux-стора! TypeScript-то, сука, позволяет отсечь эти ёбаные ошибки в экшенах и редьюсерах на корню. Вот смотри, берём discriminated unions и делаем так, чтобы редьюсер только корректные экшены жрал, а на остальное плевал:

type Action =
  | { type: 'ADD_TODO'; payload: string }
  | { type: 'TOGGLE_TODO'; id: number };

function todosReducer(state: Todo[], action: Action): Todo[] {
  switch (action.type) {
    case 'ADD_TODO': // Ошибка TS: такого типа нет в Action
      return [...state, { text: action.payload, completed: false }];
    case 'TOGGLE_TODO': // Ошибка TS
      return state.map(todo => todo.id === action.id ? {...todo, completed: !todo.completed} : todo);
    default:
      return state;
  }
}

Видишь? TypeScript сразу орёт, если ты, мудак, опечатался или левый экшен суёшь. Красота, блядь!

А ещё я, сука, с динамической типизацией API-ответов воевал — там же сплошной ад, данные приходят, а хуй пойми, что там внутри. Используешь дженерики и type guards, и вот уже можно парсить данные без этого постоянного страха, что всё ебнется в рантайме. В общем, ебать мои старые костыли, но когда это работает — чувствуешь себя почти богом, только без бороды.