1. 程式人生 > 實用技巧 >5、typeScript中的介面

5、typeScript中的介面

/* 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