TypeScript接口,属性类接口、函数类型接口、可索引接口、类类型接口、扩展接口

接口: 行为和动作的规范,对批量方法进行约束(interface)
属性接口
interface FullName{
    firstName:string;   //注意;结束
    secondName:string;
}
function printName(name:FullName){
    // 必须传入对象  firstName  secondName
    console.log(name.firstName+'--'+name.secondName);
}
// printName('1213');  //错误

var obj={   /*传入的参数必须包含 firstName  secondName*/
    firstName:'张',
    secondName:'三'
};
printName(obj)
可选接口
interface FullName{
    firstName:string;
    secondName?:string; // 属性可选(可传可不传)
}
function getName(name:FullName){
    console.log(name)
}  
getName({               
    firstName:'firstName'
})

函数类型接口:对方法传入的参数 以及返回值进行约束
// 加密的函数类型接口
interface encrypt{
    (key:string,value:string):string;
}
var md5:encrypt=function(key:string,value:string):string{
    //模拟操作
    return key+value;
}
console.log(md5('name','zhangsan'));

可索引接口: 数组、对象的约束(不常用)
  1. 可索引接口对数组约束
interface UserArr{
    [index:number]:string // 数组索引为number类型,值为string类型
}
var arr:UserArr=['aaa','bbb'];
// var arr:UserArr=[123,'bbb'];  /*错误*/
  1. 可索引接口对对象约束
interface UserObj{
    [index:string]:string // 对象key为string类型,value为string类型
}
var arr:UserObj={name:'张三'};

类类型接口:对类的约束和抽象类抽象有点相似
interface Animal{
    name:string;
    eat(str:string):void;
}
class Dog implements Animal{
    name:string;
    constructor(name:string){
        this.name=name;
    }
    eat(){ // 参数可选,但必须实现eat方法
        console.log(this.name+'吃粮食')
    }
}
var d=new Dog('小黑');
d.eat();
接口扩展:接口可以继承接口
 interface Animal{
        eat():void;
    }
    interface Person extends Animal{
        work():void;
    }
    class Web implements Person{
        public name:string;
        constructor(name:string){
            this.name=name;
        }
        // 实例必须实现父类指定方法
        eat(){
            console.log(this.name+'喜欢吃馒头')
        }
        work(){
            console.log(this.name+'写代码');
        }
        
    }
    var w=new Web('小李');
    w.eat();
### TypeScript 接口接口的定义与使用 #### 定义接口TypeScript 中,`interface` 是一种用于描述对象结构的关键工具。它可以指定对象应具备哪些属性及其对应的类型[^1]。 ```typescript interface Person { name: string; age: number; } ``` 上述代码片段展示了 `Person` 这个接口的定义方式。该接口规定任何符合此类型的对象都必须拥有两个字段:一个是字符串类型的 `name` 和一个数字类型的 `age`。 #### 实现接口 一旦定义好了一个接口之后,就可以将其应用于变量声明上以确保数据的一致性和正确性[^4]: ```typescript let tom: Person = { name: 'Tom', age: 23, }; ``` 这里创建了一个名为 `tom` 的变量并赋予其具体值,同时指定了它的类型为之前定义好的 `Person` 接口。如果尝试给 `tom` 赋予不符合 `Person` 结构的数据,则会触发编译错误提示。 #### 扩展功能——方法、可选属性和索引签名 除了基本属性外,TypeScript接口还支持更复杂的功能,比如方法定义、可选属性以及只读属性等[^2]: ##### 方法接口 可以为接口增加函数成员表示某些行为需求: ```typescript interface Greetable { greet(): void; } class Greeter implements Greetable { public greet() { console.log('Hello!'); } } ``` 在这个例子中,`Greetable` 接口要求实现者提供一个无参数返回值为空的方法 `greet()` 。而类 `Greeter` 则满足这一条件并通过 `implements` 关键字表明自己实现了这个接口[^3]。 ##### 可选属性 有时并非所有属性都是必需的,在这种情况下可以通过加问号的方式标记它们为可选项: ```typescript interface OptionalProps { id?: number; } ``` 这样即使某个对象缺少了 `id` 字段也不会违反约定。 ##### 索引签名 当不确定确切会有多少或者什么样的键名存在时,可以用索引来表达灵活性: ```typescript interface StringArray { [index: number]: string; } ``` 这意味着只要求按照位置访问得到的结果一定是字符串形式的内容。 #### 继承与其他高级特性 单继承或多继承替代方案也是 TypeScript 接口的重要组成部分之一。例如下面展示的是简单的单一继承案例: ```typescript interface Animal { move(distanceInMeters: number): void; } interface Dog extends Animal { bark(): void; } const myDog: Dog = { move(distanceInMeters) { console.log(`Moving ${distanceInMeters}m.`); }, bark() { console.log('Woof! Woof!'); }, }; myDog.move(10); myDog.bark(); ``` 在这里可以看到 `Dog` 不仅继承自 `Animal` ,而且还额外添加了自己的独特能力 —— 发声动作 `bark()` 函数。 另外值得注意的是虽然传统意义上的多重继承不被直接支持,但是通过组合多个基础接口达到相同效果却是可行的做法。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值