Es posible denotar obj
como any
, pero eso anula el propósito de usar el mecanografiado. obj = {}
implica obj
es un Object
. Marcarlo como any
no tiene sentido. Para lograr la consistencia deseada, se podría definir una interfaz de la siguiente manera.
interface LooseObject {
[key: string]: any
}
var obj: LooseObject = {};
O para hacerlo compacto:
var obj: {[k: string]: any} = {};
LooseObject
puede aceptar campos con cualquier cadena como clave y any
escribir como valor.
obj.prop = "value";
obj.prop2 = 88;
La verdadera elegancia de esta solución es que puede incluir campos seguros en la interfaz.
interface MyType {
typesafeProp1?: number,
requiredProp1: string,
[key: string]: any
}
var obj: MyType ;
obj = { requiredProp1: "foo"}; // valid
obj = {} // error. 'requiredProp1' is missing
obj.typesafeProp1 = "bar" // error. typesafeProp1 should be a number
obj.prop = "value";
obj.prop2 = 88;
Si bien esto responde a la pregunta Original, la respuesta aquí por @GreeneCreations podría dar otra perspectiva sobre cómo abordar el problema.