如何将变量限制为特定的允许值?

时间:2018-12-14 22:00:01

标签: groovy types

在Groovy中,Typescript中是否有一些等效于字符串文字类型的

type Choices = 'choice 1' | 'choice 2'
Choices input

我是不是很幸运?

2 个答案:

答案 0 :(得分:1)

没有与TypeScript的字符串文字类型完全等效的功能(至少与定义为here的术语不同)。但是,只需少量代码,您就可以使枚举执行与它们相似的操作(不是确切的行为,但实际上可能对您有用)。

考虑以下示例:

enum Choices {
    CHOICE_1("choice 1"),
    CHOICE_2("choice 2")

    String literal

    private Choices(String literal) {
        this.literal = literal
    }

    static Choices of(String literal) {
        Choices choices = values().find { it.literal == literal }
        if (choices == null) {
            throw new IllegalArgumentException("Choices with literal ${literal} is not supported!")
        }
        return choices
    }
}

Choices input = Choices.of("choice 2")

println input.literal // prints "choice 2"
println input // prints "CHOICE_2"

Choices choice = "CHOICE_1" // coerces String to enums name (but not literal!)

println choice.literal // prints "choice 1"
println choice // prints "CHOICE_1"

Choices.of("asdasd") // throws IllegalArgumentException

答案 1 :(得分:0)

是的,它们被称为枚举。

enum MyColors{
  BLUE, RED, WHITE
}

println MyColors.values()

http://grails.asia/groovy-enum-examples