ArkTS-接口和泛型接口的声明和使用接口通过interface关键字声明描述对象应具备的属性和方法。简单来说就是规定实现接口的类必须包含哪些属性哪些方法。interface接口名称{属性名:类型 方法名:返回值类型}和类不一样的是接口没有具体的实现。其里面的属性和方法只有声明没有具体属性值和方法体。接口的继承接口通过extends和继承其他接口。一个接口可继承多个父接口。interfaceDeviceBase{name:string;status:string;deviceType:string;}interfaceDeviceController{turnOn():void;turnOff():void;getStatus():string;}interfaceIDeviceextendsDeviceBase,DeviceController{location:string;}继承后新增的接口就会继承父接口的所有属性和方法接口的实现类通过implement实现接口并完成所有成员的具体实现。一个类可以实现多个接口。classAirConditionerimplementsDeviceBase,DeviceController{name:string;status:string;deviceType:string;constructor(name:string,status:string,type:string){this.namename;this.statusstatus;this.typetype;}turnOn():void{this.statuson;}turnOff():void{this.statusoff;}getStatus():void{return${this.name}的状态为${this.status};}}let airConditionernewAirConditioner(空调,on,Airconditioner);注意和抽象类不一样的是类在实现接口的时候必须把接口里要求的所有属性和方法都实现了。同时抽象类也可以实现接口且同样可以将接口里的方法拖到下一级子类实现不实现即可接口与抽象类的区别接口抽象类核心作用定义结构契约强制类遵循统一规范定义基类模板提供部分实现并约束子类成员类型仅含属性声明、方法声明可含属性、普通方法有实现、抽象方法继承/实现类可以实现多个接口多实现接口可以继承多个接口多继承类只能继承一个抽象类单继承静态成员不支持静态属性/方法支持静态属性/方法访问修饰符成员默认public不可显示添加其他修饰符支持public/private/protected修饰符泛型泛型是一种参数化多态计数允许在定义函数、类或接口时使用类型参数代替具体类型让类、函数、接口能适配多种数据类型同时保持类型校验避免重复编写相似逻辑。泛型函数function函数名T(参数:T):T{函数体}其中作为代替类型的T可替换为多种数据类型代表任何类型。functionidentityT(arg:T):T{returnarg;}//使用方式用作类型推断letstrindentitystring(light);letnumindentitynumber(26);letboolindentityboolean(true);泛型类class类名T{属性名:T属性值方法名():T{}}泛型接口interface接口名T{属性名:T方法名():T}泛型接口和泛型类倒是没什么好说的和泛型函数差不多就是把原来的类型换成泛型T。泛型使用classDeviceT{privatestatus:T;constructor(initial:T){this.stateinitialState;}updateState(newState:T):void{this.statenewState;console.log(状态更新为,this.state);}}//管理灯光开关letlightSwitchnewDeviceboolean(false);lightSwitch.updateState(true);//管理空调温度letacTempnewDevicenumber(26);acTemp.updateState(28);泛型默认值泛型默认值允许开发者在不显式指定参数类型时为参数类型或提供默认类型从而简化代码并怎强灵活性classDeviceQueueTDevice{privatedevices:T[][];//存储设备的数组类型为T[]//入队:添加任意类型的设备enqueue(device:T):void{this.devices.push(devcie);console.log(${JSON.stringify(device)}已接入队列)}}classDevice{name:string;constructor(name:string){this.namename;}}letlightQueuenewDeviceQueue();lightQueue.enqueue(newDevice(空调设备));letlightQueuenewDeviceQueuestring();lightQueue.enqueue(ArkTS);泛型约束泛型约束是让泛型只能接收特定类类型或实现了特定接口的参数避免泛型被滥用同时让编译器明确知道泛型拥有的能力从而提供更精准的类型提示和安全校验。classDeviceQueueTextendsDevice{privatedevices:T[][];enqueue(device:T):void{this.devices.push(devcie);console.log(${JSON.stringify(device)}已接入队列)}}//let stringQueue new DeviceQueuestring(); 如果这么调用就会报错因为限定为Device以及其子类在实际应用时需要注意以下几点此处的extends表示泛型约束并非类/接口的继承泛型约束可限定泛型类型为约束类型本身及其所有子类支持传入约束类的任意子类而普通类继承仅建立子类与单个父类的继承关系不能直接使用父类的其他子类二者逻辑相似但作用范围不同。