TypeScript中object、Object 和 {} 之间的区别

您所在的位置:网站首页 t和ts什么区别 TypeScript中object、Object 和 {} 之间的区别

TypeScript中object、Object 和 {} 之间的区别

2024-03-20 07:34| 来源: 网络整理| 查看: 265

我的位置:ljn1998codeing.love

在我们学习TypeScript的过程中发现,TypeScript定义了一些名字相似但是概念不同的类型,下面我们来一起讨论下object、Object 和 {} 之间的区别。

object

object 类型他表示非原始对象,number,string,boolean,symbol,null或undefined在JavaScript中为原始类型

使用object类型,就可以更好的表示像Object.create这样的API,在TypeScript2.2的发布,标准库的类型声明已经更新,以使用新的对象类型。例如,Object.create() 和Object.setPrototypeOf() 方法,现在需要为它们的原型参数指定 object | null 类型:

declare function create(o: object | null): void; create({ prop: 0 }); // OK create(null); // OK create(42); // Error create("string"); // Error create(false); // Error create(undefined); // Error Object

TypeScript中还有一个跟object 类型几乎同名的类型,他就是Object。该类型是所有 Object 类的实例的类型

用一句话来说Object就是一个对象,但是是包含了js原始的所有公用的功能。查看ts源码可以了解详情Object

在 TypeScript 中,我们使用接口来定义对象的类型,那么接口是什么???

在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范,在程序设计里面,接口起到一种限制和规范的作用。接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部状态数据,也不关心这些类里方法的实现细节,它只规定这批类里必须提供某些方法,提供这些方法的类就可以满足实际需要。 typescrip中的接口类似于java,同时还增加了更灵活的接口类型,包括属性、函数、可索引和类等

Object 接口定义了 Object.prototype 原型对象上的属性 // Object接口定义 interface Person {     name: string;     age: number; } let tom: Person = {     name: 'Tom',     age: 25 }; // success let tom: Person = {     name: 11,     age: 25 }; // Error

Object 类的所有实例都继承了 Object 接口中的所有属性

记住!Object不是object,不要把他们两混淆

let a: object let b: Object a = '1' // Error Type '"1"' is not assignable to type 'object' a = {} // Success b = '1' // Success b = {} // Success 空类型 {}

空对象:它描述了一个没有成员的对象。当你试图访问这样一个对象的任意属性时,TypeScript 会产生一个编译时错误。但是,你仍然可以使用在 Object 类型上定义的所有属性和方法,这些属性和方法可通过 JavaScript 的原型链隐式地使用,例如:

let a = {} a.prop = '123' // Error Property 'prop' does not exist on type '{}' a.toString() // "[object Object]"

在JavaSCript中给对象赋予属性很简单,但是在TypeScript中,这样写会报错

// JavaScript const a = {}; a.x = 3; a.y = 4; // TypeScript const a = {}; a.x = 3; // Error Property 'x' does not exist on type '{}' a.y = 4; // Error Property 'y' does not exist on type '{}'

这是因为上面a的类型是根据 {}推断出来的,他能对已有的属性赋值。如果需要一步步创建对象,我们可以使用类型断言as来消除TYpeScript的类型检查

const a = {} as Point; a.x = 3 a.y = 4 // Success

更好的方法是声明变量的类型并一次性构建对象

const a: Point = { x: 3, y: 4 }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3