Diferença entre 'Object', '{}' e 'object' no TypeScript
No TypeScript se tem várias formas de se definir o tipo object, que são 'Object', '{}' e 'object', vamos descobrir as diferenças entre elas.
Object:
Descreve a funcionalidade disponivel em todos os objetos Javascript, ou seja, inclui propiedades como toString()
, valueOf()
e todas outras. Sendo assim é possivel atribuir os tipos string
, boolean
, number
, bigint
, symbol
, mas não o contrário.
{
let obj: Object = {};
// ✅
obj = 1;
obj = '1';
obj = true;
obj = Symbol(1);
}
{
let obj: Object = {};
// ❌
let numberValue: number = obj;
let stringValue: string = obj;
let bigintValue: bigint = obj;
let booleanValue: boolean = obj;
let symbolValue: symbol = obj;
}
{}
Se refere a um objeto que não possui propriedade própria, mas também pode acessar as mesma funcionalidades do Object
e também atribuir os mesmos tipos.
{
let obj: {} = { number: 1 };
// ❌ Property 'name' does not exist on type '{}'
console.log(obj.name);
}
{
let obj = {};
// ✅
obj = 1;
obj = '1';
obj = true;
obj = Symbol(1);
}
{
let obj: {} = {};
// ❌
let numberValue: number = obj;
let stringValue: string = obj;
let bigintValue: bigint = obj;
let booleanValue: boolean = obj;
let symbolValue: symbol = obj;
}
object
Representa qualquer valor que não seja valor primitivo, por isso os valores primitivos não podem ser atribuidos.
{
let obj: object = {};
// ❌
obj = 1;
obj = '1';
obj = true;
obj = Symbol(1);
// ✅
obj = {};
obj = [];
obj = () => {};
}
{
let obj: object = {};
// ❌
let numberValue: number = obj;
let stringValue: string = obj;
let bigintValue: bigint = obj;
let booleanValue: boolean = obj;
let symbolValue: symbol = obj;
}