E 'possibile indicare objcome any, ma che sconfigge l'intero scopo di utilizzare dattiloscritto. obj = {}implica objè una Object. Marcatura come anynon ha senso. Per realizzare la consistenza desiderata un'interfaccia potrebbe essere definito come segue.
interface LooseObject {
[key: string]: any
}
var obj: LooseObject = {};
O per rendere più compatta:
var obj: {[k: string]: any} = {};
LooseObjectpuò accettare campi con qualsiasi stringa come chiave e anydigitare come valore.
obj.prop = "value";
obj.prop2 = 88;
La vera eleganza di questa soluzione è che è possibile includere typesafe campi nell'interfaccia.
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;