Il est possible de désigner objcomme any, mais défaites tout le but de l' utilisation tapuscrit. obj = {}implique objest un Object. La marquer comme anyn'a aucun sens. Pour atteindre la consistance désirée une interface peut être définie comme suit.
interface LooseObject {
[key: string]: any
}
var obj: LooseObject = {};
OU pour le rendre compact:
var obj: {[k: string]: any} = {};
LooseObjectpeut accepter des champs avec une chaîne comme clé et anyentrez en tant que valeur.
obj.prop = "value";
obj.prop2 = 88;
L'élégance réelle de cette solution est que vous pouvez inclure Typesafe champs dans l'interface.
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;