Можно ли расширить определение в CueLang - PullRequest
0 голосов
/ 16 апреля 2020

Можно ли расширить определение?

Например, допустим, мы хотим иметь определение подключения, подобное этому

Connection :: {
    protocol: "tcp" | "udp"
    port: int
    host: string
}

И мы также хотим иметь SecureConnection, который имеет все, что есть у Connection, но мы также хотели бы добавить имя пользователя и пароль. Как этого добиться?

Я могу сделать это так

Connection :: {
    protocol: "tcp" | "udp"
    port: int
    host: string
    ...
}

SecureConnection :: Connection & {
    username: string & >""
    password: string & >""
}

, и это будет работать, но это также означает, что это не закрыто. Из-за этих трех точек в определении Connection мы можем добавить все, что захотим для безопасного соединения

, например

tcp: SecureConnection & {
    protocol: "tcp"
    port: 8080
    host: "localhost"
    username: "guest"
    password: "guest"
    test: "testing"
    oneUnimportantVariable: "I am not important"
}

, когда я запускаю cue export myfile.cue, это даст мне следующее JSON

{
    "tcp": {
        "protocol": "tcp",
        "port": 8080,
        "host": "localhost",
        "username": "guest",
        "password": "guest",
        "test": "testing",
        "oneUnimportantVariable": "I am not important"
    }
}

Итак, как расширить определение Connection и создать определение SecureConnection и не иметь возможности указать переменную, которая не указана в этом определении?

1 Ответ

1 голос
/ 16 апреля 2020

Вы можете использовать вложение определений, как показано ниже

Connection :: {
    protocol: "tcp" | "udp"
    port: int
    host: string
}

SecureConnection :: {
    Connection
    username: string & >""
    password: string & >""
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...