É possível denotar obj
como any
, mas isso anula todo o objetivo do uso de texto datilografado. obj = {}
implica obj
é um Object
. Marcá-lo como any
não faz sentido. Para obter a consistência desejada, uma interface pode ser definida da seguinte maneira.
interface LooseObject {
[key: string]: any
}
var obj: LooseObject = {};
OU para torná-lo compacto:
var obj: {[k: string]: any} = {};
LooseObject
pode aceitar campos com qualquer sequência como chave e any
digitar como valor.
obj.prop = "value";
obj.prop2 = 88;
A verdadeira elegância dessa solução é que você pode incluir campos de segurança tipográfica na 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;
Enquanto isso responde à pergunta original, a resposta aqui de @GreeneCreations pode dar outra perspectiva de como abordar o problema.