react nodejs example ejemplos typescript

nodejs - typescript vs javascript



Interfaz mecanografiada para objetos con algunos nombres de propiedades conocidos y algunos desconocidos (3)

Tengo un objeto donde todas las claves son cadenas, algunos de los valores son cadenas y el resto son objetos de esta forma:

var object = { "fixedKey1": "something1", "fixedKey2": "something2", "unknownKey1": { ''param1'': [1,2,3], ''param2'': "some2", ''param3'': ''some3''}, "unknownKey2": { ''param1'': [1,2,3], ''param2'': "some2", ''param3'': ''some3''}, "unknownKey3": { ''param1'': [1,2,3], ''param2'': "some2", ''param3'': ''some3''}, ... ... };

En este objeto fixedKey1 y fixedKey2 son las claves conocidas que estarán allí en ese objeto. unknownKey : el par de valores puede variar de 1-n.

Intenté definir la interfaz del objeto como:

interface IfcObject { [keys: string]: { param1: number[]; param2: string; param3: string; } }

Pero esto arroja el siguiente error:

La variable de número de tipo no es asignable de tipo objeto

Lo cual descubrí que no es capaz de asignar esta interfaz a un par de "precio-clave fijo".

Entonces, ¿cómo puedo hacer la comprobación de tipo de este tipo de variables?


Como explicó @Paleo, puede usar la propiedad union para definir una interfaz para su objeto correspondiente.

Yo diría que debe definir una interfaz para los valores de los objetos y luego debe definir su objeto original.

La interfaz de muestra puede ser

export interface IfcObjectValues { param1: number[]; param2: string; param3: string; } export interface IfcMainObject { [key : string]: string | IfcObjectValues; }


La respuesta correcta a esta pregunta es:

export interface IfcObjectValues { param1: number[]; param2: string; param3: string; } interface MyInterface { fixedKey1: string, fixedKey2: number, [x: string]: IfcObjectValues, }

Tu código en acción, ver aquí .


No es exactamente lo que quieres, pero puedes usar un tipo de unión :

interface IfcObject { [key: string]: string | { param1: number[]; param2: string; param3: string; } }