-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
typescript手册-对象的类型-接口 #16
Comments
对象的可选属性有事我们希望对象的形状不完全匹配,比如我们定义了一个
过了一段时间,baby的名字起好了:
此时 即便我们定义了可选属性
|
对象的任意属性有时我们不希望接口限制对象的形状,比如我们定义了接口
使用
在指定 先看这一句报错,这个比较好理解,新增的属性需要满足属性值为 下面这两个算是同类问题,一旦定义了任意属性,那么可选属性和确定属性的类型必须是它的类型的子集,很明显 解决方法也很简单,将任意属性的类型改成联合类型或者任意类型any即可: let student:Person = {
|
对象的只读属性我们希望对象的一些属性在创建的时候就被赋值,之后就不能对其修改,这时我们可以使用readonly来定义只读属性。 我们创建了个人信息调查表,要求每个人的调查表都有id字段用于区分,并且该字段不能随意改动:
如果我们尝试修改id的值,编译将会报错:不能给id赋值因为它是一个常量或只读属性
我们可以思考一下:readonly只是在重新给只读属性赋值的时候才起作用吗? 如果我们在登记某个人的信息表的时候,忘记给他分配唯一标识id:
编译将会报错:
总结一下就是readonly会在给对象赋值的时候就开始检查,该只读属性是否存在,并且不能修改属性值。 参考: |
在
typescript
中,我们使用接口(interface)描述对象的类型什么是接口
在面向对象语言中,接口(interface)是很重要的概念,它是对行为的抽象,而具体如何行动由类(class)去实现(implement)
在
typescript
中,接口不仅可以对类的行为进行抽象,也可以对对象的形状进行描述用接口描述对象
我们通过一个简单的例子,来看接口如何对对象的形状进行描述的:
上面的例子中,我们定义了接口
Person
,然后定义了变量student
,变量的类型是Person
,这样我们就约束了student
的形状必须跟Person
一致。即必须有name
何age
两个属性。定义的对象,多一些属性是不被允许的:
我们为
student
对象新增了一个属性address
,编译报错:意思是变量不能指定
Person
类型,因为变量只能指定在Person
中的已知属性,而address
不存在于类型Person
这里我们注意到
{ name: string; age: number; address: string; }
是typescript
对student
做的类型推导,关于类型推导,我们后面再聊。定义的对象,少一些属性也是不被允许的:
可见,接口
Person
要求对象一定具备name
和age
两个属性,即形状必须保持一致。The text was updated successfully, but these errors were encountered: