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

154
Vistas
Polimorfismo mecanografiado con clase

Intento crear una función para crear una pieza de ajedrez casi como document.createElement:

 class pawn extends piece { } class bishop extends piece { } class rook extends piece { } class king extends piece { } class queen extends piece { } class knigth extends piece { } export interface pieces { "pawn": pawn "bishop": bishop "rook": rook "king": king "queen": queen "knigth": knigth } export function createPiece<K extends keyof pieces>(pieceName: K, options?: pieceInit): pieces[K]{ /// ??? }

Pero no sé qué necesito devolver en mi función createPiece... lo intento

 export function createPiece<K extends keyof pieces>(pieceName: K, options?: pieceInit): pieces[K]{ return pieces[pieceName] }

Pero recibí el siguiente error: 'piezas' solo se refiere a un tipo, pero se usa como un valor aquí

Mi meta es :

 const piece1:pawn = createPiece("pawn"); const piece2:queen = createPiece("queen"); . . .
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Definiste las pieces como una interface . Solo puede acceder a la información sobre las interfaces durante el tiempo de compilación y no durante el tiempo de ejecución. Es por eso que la línea return pieces[pieceName] no se compila.

En su lugar, debe definir las pieces como un objeto.

 export const pieces = { "pawn": pawn, "bishop": bishop, "rook": rook, "king": king, "queen": queen, "knigth": knigth }

Podemos usar este objeto para buscar las claves durante el tiempo de ejecución y también podemos extraer la información de tipo de pieces para usar durante el tiempo de compilación.

 export function createPiece< K extends keyof typeof pieces >(pieceName: K): typeof pieces[K] { return pieces[pieceName] }

Entonces, en lugar de usar pieces directamente en el tipo genérico, puede usar typeof pieces para obtener el tipo del objeto de pieces .

Patio de juegos

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede hacerlo si define la interfaz como una const. Completamente escrito se vería así:

 type PiecesKey = keyof Pieces; type Piece<T extends PiecesKey> = Pieces[T]; type Pieces = { pawn: pawn; bishop: bishop; rook: rook; king: king; queen: queen; knigth: knigth; }; const pieces = { pawn: pawn, bishop: bishop, rook: rook, king: king, queen: queen, knigth: knigth, }; type pieceInit = {}; export function createPiece<K extends PiecesKey>( pieceName: K, options?: pieceInit, ): Piece<K> { return new pieces[pieceName](); }
about 4 years ago · Juan Pablo Isaza Denunciar

0

EN su función, está devolviendo piezas de return pieces piezas es un tipo. No puede usar un tipo como usaría un valor. ¿Qué estás tratando de hacer más específicamente? te voy a dar una mano :)

about 4 years ago · Juan Pablo Isaza Denunciar
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