Как я могу ограничить переменную конкретными допустимыми значениями? - PullRequest
0 голосов
/ 15 декабря 2018

В Groovy есть ли какой-нибудь эквивалент строкового литерала в Typescript:

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

Или мне не повезло?

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Нет точного эквивалента строковых литералов TypeScript (по крайней мере, не в тех терминах, которые определены здесь ).Однако, с небольшим количеством кода, вы можете сделать перечисления, чтобы сделать что-то очень похожее на них (не точное поведение, но это может на самом деле работать для вас).

Рассмотрите следующий пример:

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
0 голосов
/ 15 декабря 2018

Да, они называются Enums.

enum MyColors{
  BLUE, RED, WHITE
}

println MyColors.values()

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...