No TypeScript, quando queremos definir um tipo de objeto, existem várias opções concisas, como 'Object', '{}' e 'object'. Quais são as diferenças entre eles?
Object (maiúsculas) descreve propriedades comuns a todos os objetos JavaScipt. Ele é definido no arquivo lib.es5.d.ts que vem com a biblioteca TypeScript.
Como você pode ver, inclui algumas propriedades comuns como toString(), valueOf() e assim por diante.
Porque enfatiza apenas as propriedades que são comuns aos objetos JavaScript. Assim, você pode atribuir objetos boxable como string, boolean, number, bigint, símbolo a ele, mas não o contrário.
{} descreve um objeto que não possui membros próprios, o que significa que o TypeScript irá reclamar se você tentar acessar seus membros de propriedade:
No exemplo de código acima, podemos ver que {} e Object (maiúsculas) têm os mesmos recursos. Ou seja, ele só pode acessar as propriedades que são comuns (mesmo que a lógica do código JavaScript esteja correta), todos os objetos boxable podem ser atribuídos a ele, etc.
Isso ocorre porque o tipo {} pode acessar essas propriedades comuns por meio da cadeia de protótipos e também não possui propriedades próprias. Portanto, ele se comporta da mesma forma que o tipo Object (maiúsculo). Mas eles representam conceitos diferentes.
objeto (em minúsculas) significa qualquer tipo não primitivo, que é expresso em código como este:
type PrimitiveType = | undefined | null | string | number | boolean | bigint | symbol; type NonPrimitiveType = object;
Isso significa que todos os tipos não primitivos não podem ser atribuídos a ele e vice-versa.
No código-fonte de muitas bibliotecas comuns, podemos ver Record
Se você achar meu conteúdo útil, por favor considere se inscrever. Eu envio um _ boletim informativo semanal todos os domingos _ com as últimas atualizações de desenvolvimento web. Obrigado por seu apoio!
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3