Er kunnen duiden objals any, maar dat verslaat het hele doel van het gebruik schrijfmachine. obj = {}impliceert objis Object. Te markeren als anygeen zin heeft. De gewenste consistentie interface kan als volgt worden omschreven bereiken.
interface LooseObject {
[key: string]: any
}
var obj: LooseObject = {};
Of om het compact te maken:
var obj: {[k: string]: any} = {};
LooseObjectkan velden met willekeurige tekenreeks als sleutel te accepteren en anytyp als waarde.
obj.prop = "value";
obj.prop2 = 88;
De echte elegantie van deze oplossing is dat je Typesafe velden in de interface kan bevatten.
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;