Cómo hacer objetos dinámicos en TypeScript
¿Hay alguna manera de definir un tipo de objeto dinámico en TypeScript? En el siguiente ejemplo, me gustaría definir un tipo para "Mi Tipo Complejo" diciendo:
Los objetos del tipo "Mi Tipo Complejo" son objetos que tienen "cualquier número de propiedades", pero los valores de esas propiedades deben ser del tipo IValue.
// value interface
interface IValue {
prop:string
}
// My Complex Type
myType = {
field1:IValue
field2:IValue
.
.
.
fieldN:IValue
}
// Using My Complex Type
interface SomeType {
prop:My Complex Type
}
Respuesta #1
Sí, ese tipo de comportamiento se puede lograr, pero de una manera ligeramente diferente. Solo necesitas usar una interfaz de TypeScript, como:
interface IValue {
prop: string
}
interface MyType {
[name: string]: IValue;
}
que se utilizará, por ejemplo, así:
var t: MyType = {};
t['field1'] = { prop: null };
t['field2'] = new DifferentType(); // compile-time error
...
var val = t['field1'];
val.prop = 'my prop value';
No tienes que crear una clase de TypeScript, todo lo que necesitas es un objeto de JavaScript normal (en ese caso {}) y hacer que implemente la interfaz MyType, para que se comporte como un diccionario y te proporcione seguridad de tipos en tiempo de compilación.
