Ayuda para la entrevista
Preparación de la entrevista
Currículum
Búsqueda de empleo
Recursos
Suscripción
ES
Telegram
Iniciar sesión
abrir menú
Ayuda para la entrevista
Asistente de IA
Extensión del navegador
Recursos
Descargar
Preguntas frecuentes / Ayuda
Preparación de la entrevista
banco de preguntas
Banco de entrevistas
Entrevistas simuladas
Mentores
Recursos
Preguntas frecuentes / Ayuda
Búsqueda de empleo
Automatización de búsqueda de empleo
Análisis de mercado
Empleos de Telegram
Recursos
Trabaja con nosotros
Blog
Preguntas frecuentes / Documentación
Telegram Blog
Telegram Soporte
Legales
Reembolso
Términos
Privacidad
Titulares de derechos
Volver a preguntas
banco de preguntas
Node.js - Desarrollador
Pregunta
Senior
Detecta el error · TypeScript Errores astutos Cada uno de estos ocho fragmentos compila, pasa una revisión casual y parece estar bien. Cada uno oculta un error. Para cada uno: dime qué rompe, bajo qué condiciones, y cómo lo detectarías. Piensa en voz alta. Nos interesa cómo lees el código, no en un cronómetro. No es necesario acertar en todo. 01 Realizar un pedido interface Notifier { send(to: string, message: string): Promise<void> } class OrderService { constructor(private readonly notifier: Notifier) {} async placeOrder(order: Order): Promise<OrderId> { const id = await this.repo.save(order) this.notifier.send(order.customerEmail, `Order ${id} confirmed`) return id } } 02 Actualizar un perfil app.post('/profile', async (req, res) => { const profile = parseProfile(req.body) try { await db.profiles.update(req.user.id, profile) } catch (err) { logger.warn('profile update failed', err) } res.status(200).json({ status: 'saved' }) }) 03 Eliminar un comentario app.delete('/comments/:id', requireAuth, async (req, res) => { const comment = await db.comments.findById(req.params.id) if (!comment) { return res.status(404).end() } await db.comments.delete(comment.id) res.status(204).end() }) 04 Paginar una lista function paginate<T>(items: T[], page: number, pageSize: number): T[] { const start = page * pageSize const end = start + pageSize return items.slice(start, end) } // llamador const results = paginate(rows, page, 20) // la página empieza en 1 en la interfaz 05 Cargar artículos con autores async function loadArticlesWithAuthors(): Promise<ArticleView[]> { const articles = await db.query('SELECT * FROM articles WHERE published = true') const views: ArticleView[] = [] for (const article of articles) { const author = await db.query('SELECT * FROM users WHERE id = $1', [article.authorId]) views.push({ ...article, author: author[0] }) } return views } 06 Resolviendo valores predeterminados en la configuración interface Settings { retryLimit?: number displayName?: string } function resolveConfig(s: Settings) { return { retryLimit: s.retryLimit || 3, displayName: s.displayName || 'Anonymous', } } 07 Probando un helper de descuentos function applyDiscount(price: number, percent: number): number { return price - price * (percent / 100) } describe('applyDiscount', () => { it('aplica un descuento', () => { const spy = vi.fn().mockReturnValue(90) const result = spy(100, 10) expect(result).toBeDefined() expect(result).toBe(90) }) }) 08 Calculando las puntuaciones principales function topScores(scores: number[], take = 3): number[] { return scores.sort((a, b) => b - a).slice(0, take) } const results = [4, 1, 9, 2] const podium = topScores(results) // ... más tarde, en otro lugar: renderRawResults(results) // esperado [4, 1, 9, 2]
Marcar como completado
Anterior
Siguiente