Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度:将字段添加到枚举(如swift/kotlin)的最佳方式?_Angular_Typescript_Enums - Fatal编程技术网

Angular 角度:将字段添加到枚举(如swift/kotlin)的最佳方式?

Angular 角度:将字段添加到枚举(如swift/kotlin)的最佳方式?,angular,typescript,enums,Angular,Typescript,Enums,我来自移动世界,我正在为一个项目学习angular 我希望我可以向诸如swift或Kotlin之类的枚举添加字段,例如在swift中: enum Status: Int { case connected = 0, disconnected = 1 var title: String { switch self { case .connected: return "Connected" case .disconnecte

我来自移动世界,我正在为一个项目学习angular

我希望我可以向诸如swift或Kotlin之类的枚举添加字段,例如在swift中:

enum Status: Int {
  case connected = 0, disconnected = 1

  var title: String {
      switch self {
        case .connected:
            return "Connected"
        case .disconnected:
            return "Disconnected"
      }
  }

  var color: UIColor {
    switch self {
      case .connected:
        return .green
      case .disconnected:
        return .red
    }
  }

}
使用:

let status = Status.connected
print(status.title) // Output Connected
print(status.color) // Output green
我试图在typescript中实现这一点,我看到了管道和名称空间为我提供的两种可能性

我的管道法解决方案

export enum Status {
  connected = 0, disconnected = 1
}

@Pipe({name: 'color'})
export class StatusColor implements PipeTransform {

  transform(value: Status): string {
    switch (value) {
      case Status.connected:
        return 'green';
      case Status.disconnected:
        return 'red';
    }
  }

}

@Pipe({name: 'title'})
export class StatusTitle implements PipeTransform {

  transform(value: Status): string {
    switch (value) {
      case Status.connected:
        return 'Connected';
      case Status.disconnected:
        return 'Disconnected';
    }
  }

}
export enum Status {
    connected = 0, disconnected = 1
}

export namespace Status {

  export function titleOf(state: Status): string {
    switch (state) {
      case Status.disconnected:
        return 'Disconnected';
      case Status.connected:
        return 'Connected';
    }
  }

  export function colorOf(state: State): string {
    switch (state) {
      case Status.disconnected:
        return 'red';
      case Status.connected:
        return 'green';
    }
  }

}
在html中使用:

user.status | color
user.status | title
当我在html代码中调用它时,这个解决方案对我来说是最漂亮的,但问题是,对于每个字段,我必须创建一个自定义管道并在app.module中声明它。因此,如果我有3,4个字段,它将使我在app.module中有很多代码和声明。假设我有大约十五个枚举。。那么,这仍然是一个好主意/好做法吗

我的命名空间方法解决方案

export enum Status {
  connected = 0, disconnected = 1
}

@Pipe({name: 'color'})
export class StatusColor implements PipeTransform {

  transform(value: Status): string {
    switch (value) {
      case Status.connected:
        return 'green';
      case Status.disconnected:
        return 'red';
    }
  }

}

@Pipe({name: 'title'})
export class StatusTitle implements PipeTransform {

  transform(value: Status): string {
    switch (value) {
      case Status.connected:
        return 'Connected';
      case Status.disconnected:
        return 'Disconnected';
    }
  }

}
export enum Status {
    connected = 0, disconnected = 1
}

export namespace Status {

  export function titleOf(state: Status): string {
    switch (state) {
      case Status.disconnected:
        return 'Disconnected';
      case Status.connected:
        return 'Connected';
    }
  }

  export function colorOf(state: State): string {
    switch (state) {
      case Status.disconnected:
        return 'red';
      case Status.connected:
        return 'green';
    }
  }

}
从html代码中使用:

Status.titleOf(user.status)
Status.colorOf(user.status)
第二种方法较简单,但不如第一种方法漂亮


那么,做我需要的事情的最佳方法是什么?这是一种好的做法吗?我是否可以为每个转换创建一个具有子名称的管道,以减少代码量?

使用管道的方法是正确的

如果不想为每个变体创建自定义管道,只需向管道添加参数即可。然后,我将创建一个enum用作参数,以避免魔法字符串四处浮动:

enum StatusType {
  title = 'title',
  color = 'color'
}
然后,在管道本身中,可以根据StatusType添加一个switch语句并返回所需的值


使用管道的好处:如果输入没有改变,管道总是在不进行计算的情况下给出相同的结果,因此您可以获得性能()。

为什么不从enum切换到静态类?因为enum I从服务器0或1接收到它