typescript 初探之 interface(接口)

typescript 接口用于约束变量的类型,名称与需要验证的变量一一对应,它不会去检查属性的顺序,只要相应的属性存在并且类型也是对的就可以,可复用。它的结构是interface 接口名称 {定义规则}

interface Test {
   
  price: number;
  name: string;
}
let info: Test = {
   
  price: 10,
  name: "Apple"
};
function messa(arg): void {
   
  console.log(arg); // { price: 10, name: 'Apple' }
}
messa(info);

上述 Test 接口对 info 的数据类型做了限制,名称一一对应,price 为 number 类型、name 为字符串类型。当类型定义不为可选类型和 any 时,这些在 Test 里出现的变量都必须出现在需要被检测的对象上,变量类型要对应上:

interface Test {
   
  price: number;
  name: string;
}
let info: Test = {
   
  name: "Apple" // 不定义price或者类型不对则报错
};

如果我们不确定某属性会不会出现,或者不确定类型,则可以用可选类型和 any 类型代替:

interface Test {
   
  price?: number;
  name: string;
  size: any;
}
let info: Test = {
   
  name: "Apple",
  size: "12"
};

上述的例子 price 是可选类型可有可无,size 是 any 类型,size 的值可以是任意数据类型。
如果我们并不是需要让属性的类型可选,而是让属性可选,那么我们可以使用索引签名。照上面普通写法,当我们给info添加一个 Test 接口里没有定义的属性时就会报错:

interface Test {
   
  price?: number;
  name: string;
}
let info: Test = {
   
  price: 10,
  name: "Apple"
};

info.addData = 20; // 类型“Test”上不存在属性“addData”。

如果我们使用字符串索引签名,则可以给 info 添加没有被定义类型的属性:

interface Test {
   
  price?: number;
  name: string;
  [index: string]: any;
}
let info: Test = {
   
  price: 10,
  name: "Apple"
};

info.addData = 20; // 可以被添加

索引类型描述能够通过索引得到的类型,也就是能够通过下标找到值。比如数组 A:[‘a’.‘b’]可以通过 A[0]获取’a’(字符串也可以通过索引获取值,例如 B:‘abcd’可以通过 B[0]获取’a’)。索引类型支持两种索引签名:字符串和数字:

[index:number]:number
[index:string]:
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值