clsr_dd

typescript interface 接口

//interface


// 接口的原理
function createPerson(person:{name:string,sex:boolean}){
    console.log(person.name+person.sex)
}
//我们传入的对象参数实际上会包含很多属性,但是编译器只会检查那些必需的属性是否存在,并且其类型是否匹配
let onePerson={name:'iwan',sex:true,age:5}
let errorPerson={name:'wian',sex:false,aged:6666}

createPerson(onePerson);


 


interface PersonValue{
    name:string
    sex:boolean
    age?:number //可选属性 带有可选属性的接口与普通的接口定义差不多,只是在可选属性名字定义的后面加一个?符号。
    mobile?:string
    readonly real_name?:string //只读属性 只能在对象刚刚创建的时候修改其值,其余时间不可以
}
 
 
createPerson2(errorPerson)

 


//PersonValue接口就好比一个名字,用来描述上面例子里的要求。 它代表了有一个 name属性且类型为string,sex为boolean的      对象

function createPerson2(person:PersonValue){
    console.log(person.name+person.sex)
    if(person.age){
        console.log(person.age)
    }
    if(person.mobile){
        console.log(person.mobile)
    }
    console.log(person.real_name)
}
let twoPerson={name:'jeeny',sex:false,age:6,real_name:'段'}
let threePerson:PersonValue={name:'john',sex:true,real_name:'5555'}
createPerson2(twoPerson);



threePerson.real_name='666'   //error  不能继承 只读属性

//
let arr:ReadonlyArray<number>=[1,2,3]
arr[1]=5;  //error  报错 
 
 
 readonly vs const
// 最简单判断该用readonly还是const的方法是看要把它做为变量使用还是做为一个属性。 做为变量使用的话用 const,若做为属性则使用readonly。


函数类型
//接口能够描述JavaScript中对象拥有的各种各样的外形。 除了描述带有属性的普通对象外,接口也可以描述函数类型。
//为了使用接口表示函数类型,我们需要给接口定义一个调用签名。 它就像是一个只有参数列表和返回值类型的函数定义。参数列表里的每个参数都需要名字和类型。
interface functionValue{
    (age:number,gender:boolean,name:string):boolean
}
 let a_fun:functionValue;
 a_fun=function(age:number,gender:boolean,name:string){
     if(age>10){
        return true
                   
     }else{
         return false
     }
}

//可索引的类型

interface index{
    [index:number]:string
    [str:string]:string 
}

let arr2:index;
arr2=[1,'2']  //这个索引签名表示了当用 number去索引StringArray时会得到string类型的返回值。 否则报错









posted on 2019-11-05 21:50  clsr_dd  阅读(319)  评论(0编辑  收藏  举报

导航