Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

166
Vistas
El tipo de clase personalizado no admite clases con métodos estáticos

Traté de asignar clases a cadenas. Algo como:

map.add(ClassName, 'my string');

para esto creé un tipo personalizado:

type NoConstructor<T> = Pick<T, keyof T>;

entonces defino un mapa como este:

const map: Map<NoConstructor<typeof Device>, string> = new Map();

while map.add(ClassName, 'my string'); funciona, map.get(instanceOfClassName.constructor) solo funciona mientras una clase no tenga métodos estáticos. Tan pronto como una clase tiene métodos estáticos, TypeScript me da un error:

El argumento de tipo 'Función' no se puede asignar al parámetro de tipo 'NoConstructor'. Al tipo 'Función' le faltan las siguientes propiedades del tipo 'NoConstructor': getInputs, getOutputs

¿Por qué los métodos estáticos en la clase influyen en mi tipo personalizado? Para mí esto no tiene sentido. ¿Alguien puede explicar por qué este es el caso y cómo solucionar este ejemplo de código?

Ejemplo en typescriptlang.org/play :

 export abstract class Device { public getStatus(): string { return 'foo'; } // Remove this one public static getInputs(): {[key: string]: number} { return {}; } // and remove this one, and the code works public static getOutputs(): {[key: string]: number} { return {}; } } class DeviceA extends Device { } type NoConstructor<T> = Pick<T, keyof T>; export default class DeviceUpdater { private readonly map: Map<NoConstructor<typeof Device>, string> = new Map(); public add(deviceType: NoConstructor<typeof Device>, updater: string) { this.map.set(deviceType, updater); } public update(device: Device): void { const result = this.map.get(device.constructor); if (result === undefined) { throw new Error(`Cannot update device of type '${device.constructor.name}': no updater found`); } console.log(result); } } const deviceUpdater = new DeviceUpdater(); deviceUpdater.add(DeviceA, 'something'); deviceUpdater.update(new DeviceA());
about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda