不说话,装高手。
Maintain silence and pretend to be an experta
在我们学习TypeScript的过程中发现,TypeScript定义了一些名字相似但是概念不同的类型,下面我们来一起讨论下object、Object 和 {} 之间的区别。
object
xa0类型他表示非原始对象,number
,string
,boolean
,symbol
,null
或undefined
在JavaScript中为原始类型
使用object
类型,就可以更好的表示像Object.create
这样的API,在TypeScript2.2的发布,标准库的类型声明已经更新,以使用新的对象类型。例如,Object.create()
xa0和Object.setPrototypeOf()
xa0方法,现在需要为它们的原型参数指定xa0object | null
xa0类型:
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
TypeScript中还有一个跟object
xa0类型几乎同名的类型,他就是Object。该类型是所有 Object 类的实例的类型
用一句话来说Object
就是一个对象,但是是包含了js原始的所有公用的功能。查看ts源码可以了解详情Object
在 TypeScript 中,我们使用接口来定义对象的类型,那么接口是什么???
在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范,在程序设计里面,接口起到一种限制和规范的作用。接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部状态数据,也不关心这些类里方法的实现细节,它只规定这批类里必须提供某些方法,提供这些方法的类就可以满足实际需要。 typescrip中的接口类似于java,同时还增加了更灵活的接口类型,包括属性、函数、可索引和类等
Object
接口定义了 Object.prototype 原型对象上的属性// Object接口定义
interface Person {
xa0 xa0 name: string;
xa0 xa0 age: number;
}
let tom: Person = {
xa0 xa0 name: 'Tom',
xa0 xa0 age: 25
}; // success
let tom: Person = {
xa0 xa0 name: 11,
xa0 xa0 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
}