ArkTS-Enum&Union&Aliases类型

ArkTS-Enum&Union&Aliases类型

  • 官方资料:
    https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/introduction-to-arkts-V5

Enum

enum类型,又称枚举类型,是预先定义的一组命名值的值类型,其中命名值又称为枚举常量。

  • 使用枚举常量时必须以枚举类型名称为前缀。
enum ColorSet { Red, Green, Blue }
let c: ColorSet = ColorSet.Red;

在这个例子中,Color 是一个枚举类型,它包含三个成员:Red、Green 和 Blue。默认情况下,枚举成员的值从 0 开始递增。所以,Color.Red 的值为 0,Color.Green 的值为 1,Color.Blue 的值为 2。

  • 常量表达式可以用于显式设置枚举常量的值。
enum ColorSet { White = 0xFF, Grey = 0x7F, Black = 0x00 }
let c: ColorSet = ColorSet.Black;
  • 案例:使用枚举表示状态
enum OrderStatus {
  Placed,
  Shipped,
  Delivered,
}

function checkOrderStatus(status: OrderStatus) {
  switch (status) {
    case OrderStatus.Placed:
      console.log('Order has been placed.');
      break;
    case OrderStatus.Shipped:
      console.log('Order has been shipped.');
      break;
    case OrderStatus.Delivered:
      console.log('Order has been delivered.');
      break;
  }
}

const status = OrderStatus.Shipped;
checkOrderStatus(status);

Union类型

  • union类型,即联合类型,是由多个类型组合成的引用类型。联合类型包含了变量可能的所有类型。
class Cat {
  // ...
}
class Dog {
  // ...
}
class Frog {
  // ...
}
type Animal = Cat | Dog | Frog | number
// Cat、Dog、Frog是一些类型(类或接口)

let animal: Animal = new Cat();
animal = new Frog();
animal = 42;
// 可以将类型为联合类型的变量赋值为任何组成类型的有效值
  • 可以用不同的机制获取联合类型中特定类型的值。
class Cat { sleep () {}; meow () {} }
class Dog { sleep () {}; bark () {} }
class Frog { sleep () {}; leap () {} }

type Animal = Cat | Dog | Frog

function foo(animal: Animal) {
  if (animal instanceof Frog) {
    animal.leap();  // animal在这里是Frog类型
  }
  animal.sleep(); // Animal具有sleep方法
}

Aliases类型

  • Aliases类型为匿名类型(数组、函数、对象字面量或联合类型)提供名称,或为已有类型提供替代名称。
type Matrix = number[][];
type Handler = (s: string, no: number) => string;
type Predicate <T> = (x: T) => boolean;
type NullableObject = Object | null;
  • 使用 type 关键字来创建类型别名
type MyNumber = number;
type MyString = string;
  • 作用
1 提高可读性: 
当一个类型在代码中多次出现时,使用类型别名可以使代码更易于理解。例如,如果有一个复杂的数据结构,使用类型别名可以让代码更清晰地表达其含义。
2 简化复杂类型: 
对于复杂的类型表达式,可以使用类型别名来简化它们。例如,如果有一个包含多个属性的对象类型,可以使用类型别名来定义这个类型,然后在代码中使用别名来代替复杂的类型表达式。
3 方便维护: 
如果一个类型在多个地方使用,并且需要修改这个类型,只需要修改类型别名的定义即可,而不需要在每个使用该类型的地方进行修改。
  • 简化函数类型
type MathOperation = (a: number, b: number) => number;
const add: MathOperation = (a, b) => a + b;
const subtract: MathOperation = (a, b) => a - b;

这里,MathOperation 是一个函数类型的别名,代表接受两个数字参数并返回一个数字的函数。使用这个别名可以使代码更清晰地表达数学运算函数的类型。

  • 结合泛型使用
type List<T> = Array<T>;
const numbersList: List<number> = [1, 2, 3];
const stringsList: List<string> = ['a', 'b', 'c'];

在这个案例中,List 是一个泛型类型别名,代表一个数组类型。使用这个别名可以使代码更清晰地表达一个列表的类型,并且可以方便地用于不同类型的列表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值