5、typeScript中的介面
阿新 • • 發佈:2020-08-02
/*
1、屬性介面
2、函式型別介面
3、可索引介面
4、類型別介面
5、介面擴充套件
*/
介面的作用:在面向物件變成過程當中,介面是一種規範的定義,它定義了行為和規範,在程式設計裡面,介面起到了限制和規範的作用。介面定義了某一批類所需要遵守的規範,介面不關心這些類的內部狀態資料,也不關心這些類裡方法的實現,它規定這批類裡面必須提供某些方法,提供這些方法的類就可以滿足實際需要,typesript中的介面類是於java,同時還增加了更加靈活的介面型別,包含屬性、函式、可索引、和類等。
定義標準。
1、屬性介面對json的約束
interface
ts中定義方法
//對批量方法進行約束
//就是對傳入屬性的約束-屬性介面
//對批量方法進行約束
可選引數
function PrintLabel():void { console.log('PrintLabel'); } PrintLabel();
ts中定義方法傳入引數
function PrintLabel(label:string):void { console.log(label); } PrintLabel('hahah')ts中定義方法傳入引數對json進行約束
function PrintLabel(lableInfo:{label:string}):void { console.log(lableInfo.label); } PrintLabel('hahah');//錯誤寫法 PrintLabel({name:'hahah'});//錯誤寫法 PrintLabel({label:'hahah'});//正確寫法
interface Fullname{ firstName:string; secondName:string; } function printName(name:Fullname) { console.log(name.firstName+'---'+name.secondName); } printName('123456');//錯誤寫法 printName({ firstName:'張', secondName:"三", age:20 });//報錯 // 只能有要傳入的屬性 printName({ firstName:'張', secondName:"三", }); // 定義傳入 傳入引數必須包含firstName secondName let obj ={ firstName:'張', secondName:"三", age:20 } printName(obj);
interface Fullname{
firstName:string;
secondName:string;
}
function printName(name:Fullname) {
// 必須傳入物件 firstName、secondName
console.log(name.firstName+'---'+name.secondName);
}
function printInfo(info:Fullname) {
// 必須傳入物件 firstName、secondName
console.log(info.firstName+'---'+info.secondName);
}
let obj ={
firstName:'張',
secondName:"三",
age:20
}
printName(obj);
let info ={
firstName:'李',
secondName:"四",
age:22
}
printName(info);
interface Fullname{ firstName:string; secondName?:string;//可選屬性 } function getName(name:Fullname) { console.log(name); } getName({ firstName:"firstName" })ajax的例子 /* $.ajax({ type:"get", url:"test.json", data:{username:$("#userName").val(),content:$("#content").val()}, dataType:"json" }); */
interface Config{ type:string, url:string, data?:string, dataType:string } // 原生js封裝ajax請求 function ajax(config:Config) { var xhr = new XMLHttpRequest(); xhr.open(config.type,config.url,true); xhr.send(config.data); xhr.onreadystatechange = function() { if(xhr.readyState===4&& xhr.status===200){ console.log('成功'); if(config.dataType === 'json'){ console.log(JSON.parse(xhr.responseText)); }else{ console.log(xhr.responseText); } } } } ajax({ type:'get', url:'http://a.itying.com/api/productlist', dataType:'json' })
2、函式型別介面
//對方法傳入的引數以及返回值進行約束批量約束 //加密的函式型別介面interface encrypy{
(key:string,value:string):string;
}
var md5:encrypy=function(key:string,value:string):string {
return key+value;
}
console.log(md5('name','zhangsan'));//namezhangsan
var sha1:encrypy=function(key:string,value:string):string {
return key+'----'+value;
}
console.log(sha1('name','lisi'));//name----lisi