ts对象的类型--接口

ts对象的类型–接口

1、简单的例子

interface Person {
 name:string;
 age:number;
}
let tom:Person = {
 name:'Tom',
 age:25,
}

接口一般首字母大写,定义的变量比接口少了一些属性是不允许的;多了一些属性也是不允许的;赋值的时候,变量的形状必须和接口的形状保持一致。

2、可选属性

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

interface Person {
 name: string;
 age?:number
}
let tom:Person = {
 name: 'Tom'
}
interface Person {
 name: string;
 age?:number
}
let tom:Person = {
 name: 'Tom',
 age: 16
}

由此可见,可选属性的含义是:可以不存在,但是仍然不允许添加未定义的属性

3、任意属性

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

interface Person {
 name: string;
 age?: number;
 [proName:string]: string;
}
let tom:Person = {
  name:'Tom',
  age:16,
  gender:'male'
}

使用[proName: string]定义了任意属性取string类型的值。

上例中,任意属性的值允许是 string,但是可选属性 age的值却是 number,number不是 string的子属性,所以报错了。

另外,在报错信息中可以看出,此时 { name: ‘Tom’, age: 25, gender: ‘male’ }的类型被推断成了 { [x: string]: string | number; name: string; age: number; gender: string; },这是联合类型和接口的结合。

一个接口中只能定义一个任意属性,如果接口中有多个类型的属性,则可以在任意属性中使用联合类型

interface Person {
    name:sting;
    age:number,
    [propName:string]: string | number;
}
let tom:Person = {
   name:'Tome',
   age:16,
   gender: 'male'
}

4、只读属性(readonly)

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值