发表于: 2021-08-19 23:50:16

0 2205


今天完成的事情:

TS接口

function printLabel(labelledObj: { label: string })

 console.log(labelledObj.label); 

}

let myObj = { 

size: 10,

 label: "Size 10 Object" 

};

 printLabel(myObj);


类型检查器会查看printLabel的调用。 printLabel有一个参数,并要求这个对象参数有一个名为label类型为string的属性。 需要注意的是,我们传入的对象参数实际上会包含很多属性,但是编译器只会检查那些必需的属性是否存在,并且其类型是否匹配。 然而,有些时候TypeScript却并不会这么宽松



重写上面的例子,这次使用接口来描述:必须包含一个label属性且类型为string


interface LabelledValue {

  label: string

}function printLabel(labelledObj: LabelledValue) {

  console.log(labelledObj.label); 

}

let myObj = {

size: 10,

 label: "Size 10 Object"

};

 printLabel(myObj);


LabelledValue接口就好比一个名字,用来描述上面例子里的要求。 它代表了有一个 label属性且类型为string的对象。 需要注意的是,我们在这里并不能像在其它语言里一样,说传给 printLabel的对象实现了这个接口。我们只会去关注值的外形。 只要传入的对象满足上面提到的必要条件,那么它就是被允许的。

还有一点值得提的是,类型检查器不会去检查属性的顺序,只要相应的属性存在并且类型也是对的就可以。





返回列表 返回列表
评论

    分享到