Ответ
Одна из интересных задач — реализация строгой типизации для 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, и вот уже можно парсить данные без этого постоянного страха, что всё ебнется в рантайме. В общем, ебать мои старые костыли, но когда это работает — чувствуешь себя почти богом, только без бороды.