文章目录

  • Object、object和{}(对象类型)
    • Object
    • object
    • {}/空类型
    • 总结(比较)

Object、object和{}(对象类型)

Object

Object类型是所有 Object 类的实例的类型。它由以下两个接口来定义:

  • Object 接口定义了 Object.prototype 原型对象上的属性;
  • ObjectConstructor 接口定义了 Object 类的属性。

如何理解上述两点呢?

Object是一个对象,但是是包含了js原始的所有公用的功能,这个需要去了解js的原型链(这里不过多进行讲述),从TypeScript源码进行分析:

interface Object {/** The initial value of Object.prototype.constructor is the standard built-in Object constructor. */constructor: Function;/** Returns a string representation of an object. */toString(): string;/** Returns a date converted to a string using the current locale. */toLocaleString(): string;/** Returns the primitive value of the specified object. */valueOf(): Object;/*** Determines whether an object has a property with the specified name.* @param v A property name.*/hasOwnProperty(v: PropertyKey): boolean;/*** Determines whether an object exists in another object's prototype chain.* @param v Another object whose prototype chain is to be checked.*/isPrototypeOf(v: Object): boolean;/*** Determines whether a specified property is enumerable.* @param v A property name.*/propertyIsEnumerable(v: PropertyKey): boolean;
}
interface ObjectConstructor {/** Invocation via `new` */new(value?: any): Object;/** Invocation via function calls */(value?: any): any;readonly prototype: Object;getPrototypeOf(o: any): any;// ···
}
declare var Object: ObjectConstructor;

从中可以看出,Object的构造函数指向了Function,在学习js原型链时我们知道Object和Function是相互指向对方的

Object类型可以通过new进行创建;

注意:Object类型包含了所有的原始/基础类型,所以可以给Object类型赋值为基础类型;如果值对象属性名与 Object 接口中的属性冲突,则 TypeScript 编译器会提示相应的错误:如下例,对象中重写了toString方法,但是返回类型和Object中返回类型string冲突,所以报错;

let obj: Object; // 或者 let obj = new Object();
obj = "hell oworld";
obj = 1;
obj = true;
obj = undefined; //Error:Type 'undefined' is not assignable to type 'Object'.
obj = {// Type 'number' is not assignable to type 'string'toString() {return 123;}
}

数组型Object => Object[]:因为Object包含原始类型,所以下面代码编译不会报错

let obj: Object[];
obj = [123,true,"hello world",[1, 'a', false]
];

object

object 类型是:TypeScript 2.2 引⼊的新类型,它⽤于表示⾮原始类型。object是键值对集合,特殊在值也必须是object

注意:object类型默认可以使用在 Object 类型上定义的所有属性和方法,这些属性和方法可通过 JavaScript 的原型链隐式地使用,但是如果在object中重写了原型链中的属性或者方法,那么会直接覆盖,不受原型链上的影响!

let obj: object;
obj = 1; // Error:Type 'number' is not assignable to type 'object'.
obj = true; // Error: Type 'boolean' is not assignable to type 'object'.
obj = 'a'; // Error: Type 'string' is not assignable to type 'object'.
obj = undefined; //Error:Type 'undefined' is not assignable to type 'object'.
obj = {a : "hell oworld",b : 1,c : true,
}obj = {toString() {return 123;}
}
console.log(obj.toString()) // 123

{}/空类型

空类型:{}。它描述了一个没有成员的对象,在typeScript中可以有以下方式生成空类型:

  • 1、没有声明变量类型,但是初始值为{}

    let obj = {};
    
  • 直接声明变量类型为{}

    let obj: {};
    

当你试图访问这样一个对象的任意属性时,TypeScript 会产生一个编译时错误;但是,你仍然可以使⽤在 Object 类型上定义的所有属性和⽅法,这些属性和⽅法可通过 JavaScript 的原 型链隐式地使⽤:

let obj: {};
obj = undefined; //Error:Type 'undefined' is not assignable to type '{}'.
obj = 'a';
obj = {a : "hell oworld",b : 1,c : true,toString() {return 123;}
}
console.log(obj)
/*
{"a": "hell oworld","b": 1,"c": true
}
*/
console.log(obj.toString()) // 123;

总结(比较)

对于Object、object和{},三者都可以使⽤在 Object 类型上定义的所有属性和⽅法,这些属性和⽅法可通过 JavaScript 的原 型链隐式地使⽤;并且都不能被赋值为undefined、null类型;

Object vs object:

  • 1、两者原型上属性方法重写表现不一致;
  • 2、object类型值表示⾮原始类型,Object类型值可以为原始类型;
  • 3、Object可以通过new来定义类型;

Object vs {}:

  • 1、两者类型值可以为原始类型;
  • 2、两者原型上属性方法重写表现不一致;
  • 3、Object可以通过new来定义类型;

object vs {}:

  • 1、两者原型上属性方法重写表现一致;
  • 2、object类型值表示⾮原始类型,{} 类型值可以为原始类型;

【TypeScript】Object、object和{}类型相关推荐

  1. TypeScript 的 Object Types

    有三种方式定义 TypeScript 的 object Types. 1. 匿名类型 - anonymous type function greet(person: { name: string; a ...

  2. TypeScript 里 object 和 Object 的区别

    这两个概念及其容易混淆. 特殊类型对象 object 指的是任何非原始值(字符串.数字.布尔值.符号.空值或未定义). 这不同于空对象类型{},也不同于全局类型 Object. 你很可能永远不会使用 ...

  3. Object Pascal 中类型

    Object Pascal 中类型的一些注意 2010-04-16 14:15 --------------------------------------------------------- 原创 ...

  4. Java中Object转Map类型,Map转Object类型

    前言 在使用Java编程过程中,经常会遇到获取的数据为Object类型,但只是以这种方式传输,实质还是Map类型,此时就涉及到两种类型的相互转换. 强制转换 在类型转换工程中,常见的转换方式为强制转换 ...

  5. typescript 提示 Object is possibly ‘null‘ 的N种解决方法

    document.querySelector('.main-table').setAttribute('height', '300px'); 如上,我要设置某元素的高度,但typescript提示 O ...

  6. python object类型是什么_python object是何种类型

    python object是何种类型 发布时间:2020-08-26 10:23:01 来源:亿速云 阅读:58 作者:Leah 这篇文章运用简单易懂的例子给大家介绍python object是何种类 ...

  7. TypeScript完全解读(26课时)_2.TypeScript完全解读-基础类型

    2.TypeScript完全解读-基础类型 src下新建example文件夹并新建文件.basic-type.ts.截图中单词拼错了.后需注意一下是basic-type.ts 可以装tslint的插件 ...

  8. [译] TypeScript 3.0: unknown 类型

    原文地址:TypeScript 3.0: The unknown Type 原文作者:Marius Schulz 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- ...

  9. 【TypeScript】03-TypeScript基本类型

    TypeScript基本类型 在TypeScript中,基本类型是非常重要的一部分,下面我们将详细介绍TypeScript中的基本类型. 基本类型约束 在TypeScript中,可以使用基本类型来约束 ...

最新文章

  1. R语言ggplot2可视化:ggplot2可视化两个水平条形图(horizontal)、并设置两个条形图使用共享的X轴、使用类似population pyramid可视化的方式绘制共享X轴的水平条形图
  2. 每日一皮:阅读软件许可协议让你想到了什么?
  3. 设计模式学习笔记(1)之单例模式
  4. S2SH框架入门之使用hibernate进行基础的增删改查
  5. PHP从零开始--数据库
  6. 【12图】你管这破玩意叫Pulsar
  7. spray.json_如何使用Spray-json(Un)在Akka HTTP中封送JSON
  8. python 类方法 静态方法_Python静态方法和类方法
  9. 优先深度搜索判断曲线相交_深度优先搜索(Depth-first search)是如何搜索一张图的?...
  10. 杨校老师课堂之Hadoop环境搭建(一)
  11. HCNA华为认证网络工程师视频教程
  12. 解决:蓝奏云下载链接没法打开问题
  13. WIN7安装启动盘制作并支持usb3.0
  14. 【知识向】——计算机基础知识总结及相关
  15. QT图形显示和处理1
  16. [高等数学]--曲率,曲率半径-
  17. 从大数据+AI 谈谈概念与场景
  18. “无论我们多么固执地渴求着对称和永恒,时间总是在不断制造着世间种种的不对称、不可逆以及死亡”。...
  19. 【前端单元测试入门03】Sinon
  20. 一文带你看懂软件测试职业发展规划

热门文章

  1. 第二代计算机主要应用领域转为____.,计算机应用基础知识2解答.doc
  2. sql 查询除某列之外的数据
  3. IT职场新人碰到的几个常见误区
  4. 跨越财富鸿沟:技术写作带来的无限可能 —— 怎样通过技术写作实现财富自由?
  5. 如何在你的CSDN 博客中添加广告代码(网赚)
  6. 基于WxPusher给自己的个人微信发送提醒消息(二)
  7. 【厚积薄发系列】C++项目总结11—基于Python爬虫框架的Bug规范性检查系统
  8. Firefox的about:config设置详解
  9. csgo跳投指令_CSGO一键跳投脚本代码,附CFG文件下载
  10. 使用Open3D绘制三角形