Jest to możliwe do określenia objjak any, ale pokonuje cały cel korzystania maszynopis. obj = {}Oznacza objto Object. Oznaczając go jako anynie ma sensu. W celu uzyskania pożądanej konsystencji interfejs może być zdefiniowana w następujący sposób.
interface LooseObject {
[key: string]: any
}
var obj: LooseObject = {};
OR, aby to kompaktowy:
var obj: {[k: string]: any} = {};
LooseObjectMożna przyjąć pola z dowolnym ciągiem jako klucz i anywpisać jako wartość.
obj.prop = "value";
obj.prop2 = 88;
Prawdziwa elegancja tego rozwiązania jest to, że można dołączyć typesafe pola w interfejsie.
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;