二、接口
- 可选属性? 只读属性readonly
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| // 定义一个接口 限定约束对象中的数据 interface IPerson { // readonly id为只读类型(属性)【不能使用const(变量)】 readonly id:number, name:string, age:number, // sex为可有可无 sex?:string } const Person:IPerson = { id:1, name:'he', age:23, // money:1000, 接口没有,对象不能再添加 } // Person.money = 1000 接口没有,对象不能再添加 console.log(Person);
|
2. 函数类型:通过接口的方式作为函数的类型来使用
为了使用接口表示函数类型,我们需要给接口定义一个调用签名。
它就像是一个只有参数列表和返回值类型的函数定义。参数列表里的每个参数都需要名字和类型。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| // 接口 interface Func { (source: string, subString: string): boolean } // 函数 const mySearch: Func = function(source: string, sub: string): boolean { // source 的字符串中查找 sub 字符串 return source.search(sub) > -1 }
console.log(mySearch('abcd', 'bc'))
interface Func { // 定义一个调用签名 (name: string, form: string): boolean } const handlePerson:Func = function (name: string, form: string): boolean { console.log(name+ ' ' +form); return false } console.log(handlePerson('he','China'));
|
3. 类类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| (() => { // 定义一个接口 interface IFly { fly(), } interface IRun { run() } let name = 'he' // 类 关系:类实现了这个接口 // 一个类可以被多个接口约束 class Person implements IFly, IRun { fly() { console.log(name + '我会飞了'); } run() { console.log(name + '我会跑了'); } } // 实例化对象 const lisi = new Person() lisi.fly() lisi.run()
// 接口可以继承其他多个接口 // 定义一个接口继承其他接口 interface IMydoing extends IFly, IRun { } // 定义一个类 class Person2 implements IFly, IRun { fly() { console.log('zhangsan我会飞了'); } run() { console.log('zhangsan我会跑了'); } } let zhangsan = new Person2() zhangsan.fly() zhangsan.run()
})()
|