Typescript——对象的类型-接口

在Typescript中,我们用接口interfaces来定义对象的类型

ts中的接口是一个非常灵活的概念,除了可以用对于累的一部分行为进行抽象以为,也常用语对【对象的形状(Shape)】进行描述。

简单的例子

复制代码
// 定义一个接口 Person
// 接口一般首字母大写
interfaces Person { name:string; age:number; }
// 定义了一个变量tom,它的类型是Person.这样,我们就约束了tom的形状必须和接口Person一致 let tom: Person
= { name:'Tom', age:28 }
复制代码

定义的变量比接口少了一些属性是不允许的:

interfaces Person {
  name:string;
  age: number;    
}
let tom: Person = {
  name:'Tom'  
}
// 以上是不被允许的,因为没有指定变量的age

多一些属性也是不被允许的:

复制代码
interfaces Person {
  neme:string;
  age:number;    
}
let tom: Person = {
  neme:'Tom',
  age:25,
  gender:'male'  
}
// 以上是不被允许的,因为比Person类型多了属性
复制代码

可见,赋值的时候,变量的形状必须和接口的的形状保持一致。

可选属性

有时候我们希望不要完全匹配一个形状,那么可以用可选属性

复制代码
interfaces Person {
  name:string;  
  age?:number
}
let tom: Person = {
  name:'Tom'  
}
或者
let tom: Person = {
  name:'Tom',
  age:28    
}
// 可选属性的含义是该属性可以不存在,用?来定义

// 这时候任然不允许添加未定义的属性
let tom: Person = {
  name:'Tom',
  age:28,
  gender:'male'
}
// 这是不被允许的
复制代码

任意属性

有时候我们希望一个接口允许有任意属性,可以用如下方式:

复制代码
interfaces Person {
  name:string;
  age?:number ;
  [propName:string]:any;
}
let tom:Person = {
  name:'Tom',
  gender:'male'    
}
// 使用[propName:string]定义了任意属性取string类型的值
复制代码

需要注意的是:一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集,一般用任意类型来定义任意属性(any)

只读属性

有时候我们希望对象中的一些自动只能在创建的时候被赋值,那么可以用readonly定义只读属性

复制代码
interfaces Person {
    readonly id:number;
    name:string;
    age?:number;
    [prop:string]:any
}
let tom: Person = {
    id:1,
    name:'Tom',
    age:28,
    gender:'male'
}
// readonly 定义的属性id初始化后,将不能再被赋值修改
tom.id = 2    // 这是不允许的,将报错
复制代码

注意:只读属性的约束存在于第一次给对象赋值的时候,而不是第一次给只读实现赋值的时候

复制代码
interfaces Person {
    readonly id:number;
    name:string;
    age?:number;
    [prop:string]:any
}
let tom: Person = {
    name:'Tom',
    age:28,
    gender:'male'
}
// 第一处错误,在给tom赋值的是,没有给id赋值

tom.id=1    // 第二处错误,tom.id赋值的是好,由于它是只读属性,所以报错了
复制代码

 

posted @   流氓兔讲文化  阅读(154)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
点击右上角即可分享
微信分享提示