鸿蒙开发07-interface
在 ArkTS(HarmonyOS Ability Runtime TypeScript)中,interface(接口)是一种强大的类型工具,它主要用于定义对象的结构,为对象的属性和方法提供类型约束,帮助开发者编写更加规范、可维护和可扩展的代码。以下是关于 ArkTS 中 interface 的详细介绍:
一 基本定义与语法
在 ArkTS 里,使用 interface 关键字来定义接口,其基本语法如下:
interface 接口名称 {
属性名: 属性类型;
方法名(参数列表): 返回值类型;
}
下面是一个简单的示例,定义了一个表示人的接口:
interface Person {
name: string;
age: number;
sayHello(): void;
}
在上述代码中,Person 接口定义了一个对象应该具有 name(字符串类型)、age(数字类型)属性,以及一个无返回值的 sayHello 方法。
二 接口的使用
当定义好接口后,就可以用它来约束对象的类型。示例如下:
interface Person {
name: string;
age: number;
sayHello(): void;
}
let person: Person = {
name: 'Alice',
age: 25,
sayHello: function() {
console.log(`Hello, my name is ${this.name}.`);
}
};
person.sayHello();
在这个例子中,person 对象遵循了 Person 接口的定义,所以它包含 name、age 属性和 sayHello 方法。
2.1 接口属性
可选属性
在接口中,可以使用 ? 来标记可选属性,这意味着对象可以有该属性,也可以没有。示例如下:
interface Book {
title: string;
author?: string;
year: number;
}
let book1: Book = {
title: 'The Great Gatsby',
year: 1925
};
let book2: Book = {
title: 'To Kill a Mockingbird',
author: 'Harper Lee',
year: 1960
};
在 Book 接口中,author 是可选属性,book1 对象没有 author 属性,而 book2 对象有。
只读属性
使用 readonly 关键字可以将接口的属性设置为只读,一旦对象被初始化,该属性的值就不能再被修改。示例如下:
interface Point {
readonly x: number;
readonly y: number;
}
let point: Point = { x: 10, y: 20 };
// 下面这行代码会报错,因为 x 是只读属性
// point.x = 30;
接口属性可以是字段、getter、setter或getter和setter组合的形式。
属性字段只是getter/setter对的便捷写法。以下表达方式是等价的:
interface Style {
color: string;
}
interface Style {
get color(): string;
set color(x: string);
}
实现接口的类也可以使用以下两种方式:
interface Style {
color: string;
}
class StyledRectangle implements Style {
color: string = '';
}
interface Style {
color: string;
}
class StyledRectangle implements Style {
color: string = '';
}
2.2 接口继承
接口可以继承其他接口,如下面的示例所示:
interface Style {
color: string;
}
interface ExtendedStyle extends Style {
width: number;
}
继承接口包含被继承接口的所有属性和方法,还可以添加自己的属性和方法。
三 抽象类和接口
抽象类与接口都无法实例化。抽象类是类的抽象,抽象类用来捕捉子类的通用特性,接口是行为的抽象。在ArkTS中抽象类与接口的区别如下:
- 一个类只能继承一个抽象类,而一个类可以实现一个或多个接口;
- 接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
- 抽象类里面可以有方法的实现,但是接口完全都是抽象的,不存在方法的实现;
- 抽象类可以有构造函数,而接口不能有构造函数。
更多推荐

所有评论(0)