Estoy mirando código TypeScript y me di cuenta de que utilizan:
interface Blablabla {
field: Object;
}
Cuál es el beneficio de usar Object
vs any
, como en:
interface Blablabla {
field: any;
}
Object
es más restrictivo que any
. Por ejemplo:
let a: any;
let b: Object;
a.nomethod(); // Transpiles just fine
b.nomethod(); // Error: Property 'nomethod' does not exist on type 'Object'.
La clase Object
no tiene una función nomethod()
, por lo tanto el transpilador generará un error diciéndote exactamente eso. Si usas any
en su lugar básicamente le estás diciendo al transpilador que todo vale, no estás proporcionando ninguna información sobre lo que se almacena en a
- ¡puede ser cualquier cosa! Y por lo tanto el transpilador le permitirá hacer lo que quiera con algo definido como any
.
Resumiendo
cualquier
puede ser cualquier cosa (puedes llamar a cualquier método, etc. sin errores de compilación)Object
expone las funciones y propiedades definidas en la clase Object
.any
es algo específico de TypeScript se explica bastante bien en la respuesta de alex's.
Object
se refiere al tipo object
de JavaScript. Comúnmente usado como {}
o a veces new Object
. La mayoría de las cosas en javascript son compatibles con el tipo de datos object ya que heredan de él. Pero any
es específico de TypeScript y compatible con todo en ambas direcciones (no basado en herencia). e.g.:
var foo:Object;
var bar:any;
var num:number;
foo = num; // Not an error
num = foo; // ERROR
// Any is compatible both ways
bar = num;
num = bar;
Object parece ser una declaración más específica que cualquiera. De la especificación TypeScript (sección 3):
Todos los tipos en TypeScript son subtipos de un único tipo superior llamado Cualquier tipo. La palabra clave any hace referencia a este tipo. El tipo Any es el El tipo Any es el único tipo que puede representar cualquier valor JavaScript sin restricciones. Todos los demás tipos son categorizados como tipos primitivos, tipos objeto, o parámetros de tipo. Estos tipos introducen varias restricciones estáticas en
sus valores.
También:
El tipo Any se utiliza para representar cualquier valor JavaScript. Un valor del tipo Any soporta las mismas operaciones que un valor en JavaScript y se realiza una mínima comprobación estática de tipo para las operaciones sobre valores Any . En concreto, se puede acceder a las propiedades de cualquier nombre a través de un valor Any y los valores Any pueden ser llamados como funciones o constructores con cualquier lista de argumentos.
Los objetos no permiten la misma flexibilidad.
Por ejemplo:
var myAny : any;
myAny.Something(); // no problemo
var myObject : Object;
myObject.Something(); // Error: The property 'Something' does not exist on value of type 'Object'.