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

205
Vistas
¿Cómo puedo hacer que una clave sea del tipo cadena (y no un número o símbolo)?

Quiero crear un tipo para un objeto con claves de string y valores arbitrarios. Por lo tanto, mi tipo deseado (llamémoslo Obj ) debería causar un error de tipo para el siguiente objeto obj porque su clave es de tipo number :

 const obj: Obj = { 1: "foo" // I'd expect a TS error here because the key 1 is of type `number` and not `string` };

¡Sin embargo, todos mis intentos no causan ningún error de TS! Aquí están mis tres intentos:

  1. Tipo de Record integrado (que utiliza implícitamente el operador in ):
 type Obj = Record<'1', any>; const obj: Obj = { 1: "foo" // TS error expected! ❌ };
  1. Tipo asignado (para recrear el tipo de Record ):
 type Obj = { [key: string]: any }; const obj: Obj = { 1: "foo" // TS error expected! ❌ };
  1. Tipo de Record personalizado con reasignación de teclas a través as :
 type MyRecord<K extends string, T> = { [P in K as string]: T; }; type Obj = MyRecord<string, any>; const obj: Obj = { 1: "foo" // TS error expected! ❌ };
  1. Incluso el uso de un tipo literal '1' no obliga a que la clave sea '1' , pero permite el número 1 :
 type Obj = Record<'1', any>; const obj: Obj = { 1: "foo" // TS error expected! ❌ };

¿Es posible en general, o se debe a alguna propiedad de un objeto JavaScript que no es posible?

TS Zona de juegos de mi código .

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

El 1 se coacciona a una string ( "1" ) cuando se define un objeto literal. No puede definir un objeto con teclas number :

 const obj = { prop: 'value', 1: 'another value', }; for (const key in obj) { console.log(key, typeof key); }

about 4 years ago · Juan Pablo Isaza Denunciar

0

Por lapágina keyof del documento de TypeScript

Las claves de objeto de JavaScript siempre se coaccionan a una cadena, por lo que obj[0] siempre es lo mismo que obj["0"]

Entonces, de hecho, {1: "foo"} es igual que {"1": "foo"} .

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