【TypeScript】Object、object和{}类型
文章目录
- 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和{}类型相关推荐
- TypeScript 的 Object Types
有三种方式定义 TypeScript 的 object Types. 1. 匿名类型 - anonymous type function greet(person: { name: string; a ...
- TypeScript 里 object 和 Object 的区别
这两个概念及其容易混淆. 特殊类型对象 object 指的是任何非原始值(字符串.数字.布尔值.符号.空值或未定义). 这不同于空对象类型{},也不同于全局类型 Object. 你很可能永远不会使用 ...
- Object Pascal 中类型
Object Pascal 中类型的一些注意 2010-04-16 14:15 --------------------------------------------------------- 原创 ...
- Java中Object转Map类型,Map转Object类型
前言 在使用Java编程过程中,经常会遇到获取的数据为Object类型,但只是以这种方式传输,实质还是Map类型,此时就涉及到两种类型的相互转换. 强制转换 在类型转换工程中,常见的转换方式为强制转换 ...
- typescript 提示 Object is possibly ‘null‘ 的N种解决方法
document.querySelector('.main-table').setAttribute('height', '300px'); 如上,我要设置某元素的高度,但typescript提示 O ...
- python object类型是什么_python object是何种类型
python object是何种类型 发布时间:2020-08-26 10:23:01 来源:亿速云 阅读:58 作者:Leah 这篇文章运用简单易懂的例子给大家介绍python object是何种类 ...
- TypeScript完全解读(26课时)_2.TypeScript完全解读-基础类型
2.TypeScript完全解读-基础类型 src下新建example文件夹并新建文件.basic-type.ts.截图中单词拼错了.后需注意一下是basic-type.ts 可以装tslint的插件 ...
- [译] TypeScript 3.0: unknown 类型
原文地址:TypeScript 3.0: The unknown Type 原文作者:Marius Schulz 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- ...
- 【TypeScript】03-TypeScript基本类型
TypeScript基本类型 在TypeScript中,基本类型是非常重要的一部分,下面我们将详细介绍TypeScript中的基本类型. 基本类型约束 在TypeScript中,可以使用基本类型来约束 ...
最新文章
- R语言ggplot2可视化:ggplot2可视化两个水平条形图(horizontal)、并设置两个条形图使用共享的X轴、使用类似population pyramid可视化的方式绘制共享X轴的水平条形图
- 每日一皮:阅读软件许可协议让你想到了什么?
- 设计模式学习笔记(1)之单例模式
- S2SH框架入门之使用hibernate进行基础的增删改查
- PHP从零开始--数据库
- 【12图】你管这破玩意叫Pulsar
- spray.json_如何使用Spray-json(Un)在Akka HTTP中封送JSON
- python 类方法 静态方法_Python静态方法和类方法
- 优先深度搜索判断曲线相交_深度优先搜索(Depth-first search)是如何搜索一张图的?...
- 杨校老师课堂之Hadoop环境搭建(一)
- HCNA华为认证网络工程师视频教程
- 解决:蓝奏云下载链接没法打开问题
- WIN7安装启动盘制作并支持usb3.0
- 【知识向】——计算机基础知识总结及相关
- QT图形显示和处理1
- [高等数学]--曲率,曲率半径-
- 从大数据+AI 谈谈概念与场景
- “无论我们多么固执地渴求着对称和永恒,时间总是在不断制造着世间种种的不对称、不可逆以及死亡”。...
- 【前端单元测试入门03】Sinon
- 一文带你看懂软件测试职业发展规划
热门文章
- 第二代计算机主要应用领域转为____.,计算机应用基础知识2解答.doc
- sql 查询除某列之外的数据
- IT职场新人碰到的几个常见误区
- 跨越财富鸿沟:技术写作带来的无限可能 —— 怎样通过技术写作实现财富自由?
- 如何在你的CSDN 博客中添加广告代码(网赚)
- 基于WxPusher给自己的个人微信发送提醒消息(二)
- 【厚积薄发系列】C++项目总结11—基于Python爬虫框架的Bug规范性检查系统
- Firefox的about:config设置详解
- csgo跳投指令_CSGO一键跳投脚本代码,附CFG文件下载
- 使用Open3D绘制三角形