Tengo una pregunta relativamente trivial, digamos que necesito crear un nuevo tipo a partir de una respuesta JSON
Mi respuesta JSON (llamémosla respuesta de etiqueta) es la siguiente
{ id1: "someString" someField: "someString" someMoreFields: "someString" EvenMorefields: "someString" EvenMoreMoreFields: "someString" SoManyManyFields: "someString" EndlessFields: "someString" }Ahora, si elijo crear un tipo a partir de esta respuesta, sería el siguiente (corríjame si me equivoco)
export type LabelResponse = { Fields: string; FieldsMore:string; MoreMoreFields:string; MoreMoreMoreFields:string; }Esto es muy detallado ya que cuantas más ID tenga, más campos necesitaré y todas las ID son del mismo tipo.
¿Hay alguna manera de escribir esto de forma abreviada, por ejemplo, en mi parámetro de función, en lugar de declarar un tipo para él?
Por ejemplo en lugar de
function myFunction(label:LabelResponse)¿Sería posible declarar mi tipo en los paréntesis de parámetros? Como esto:
function myFunction(label:DeclareMyTypeHereSomehow?)Puede crear un tipo de registro que incluya una clave de cadena y una clave de valor de la siguiente manera:
type LabelResponse = Record<string, string> const data: LabelResponse = { id1: "someString", id2: "someString", someRandomString: "someString", someWeirdString: "someString", }Puede acortar la definición de tipo utilizando tipos de plantilla literal como los siguientes:
export type LabelResponse = { [K in `id${1|2|3|4}`]: string; }Esto dará un tipo como:
type LabelResponse = { id1: string; id2: string; id3: string; id4: string; } O si no le importa el rango real, puede usar id${number} :
export type LabelResponse = { [K in `id${number}`]: string; } // errors since key doesn't start with id const x: LabelResponse = { 'x1': 'hello' } // works const y: LabelResponse = { 'id2': 'world' } // not works since it expects a number after id const z: LabelResponse = { 'idx': '!' }Si no le importa la clave en absoluto, puede hacer lo siguiente:
type LabelResponse = { [K: string]: string }