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;
}
}