Проверка подписи enum - PullRequest
       0

Проверка подписи enum

0 голосов
/ 03 февраля 2020

Я использую enum для хранения переводов для моего кода.

Так, например, у меня есть файл с именем "resources_eng":

export enum ResourcesEnum {
    TXT_YES = "yes",
    TXT_NO = "no",
}

И в другом файле с именем " resources.spa ":

export enum ResourcesEnum {
    TXT_YES = "si",
    TXT_NO = "no",
}

И, наконец, я делаю в другом файле

import { ResourcesEnum as ResourcesEnumEng } from 'resources.eng';
import { ResourcesEnum as ResourcesEnumEsp } from 'resources.esp';

if (lang == "en") {
    this.enum = ResourcesEnumEng;
} else {
    this.enum = ResourcesEnumEsp;
}

Но я не смог установить enum для любого типа, отличного от any , поэтому у меня нет чека.

У меня может быть

export enum ResourcesEnum {
    TXT_YES = "si",
    TXT_NONONO = "no",
}

, и я не получу сообщение об ошибке.

Is есть ли способ дать тип моим перечислениям, чтобы я мог иметь ошибку во время компиляции?

1 Ответ

2 голосов
/ 03 февраля 2020

Я думаю, что подход с использованием перечислений здесь неправильный, вы никогда не сможете получить объединенный тип из двух перечислений, потому что они различны, так как перечисления не существуют в javascript они переводятся в объекты, пожалуйста, прочитайте перечисления

Ваше перечисление при переносе будет:

const ResourcesEnum = {
    TXT_YES: "yes",
    TXT_NO: "no",
}

Другой подход, используемый приложениями, такими как locize или фразуapp, выглядит примерно так:

interface translation {
  TXT_YES: string;
  TXT_NO: string;
}

const engTranslation: translation = {
  TXT_YES: 'yes',
  TXT_NO: 'no'
}

По моему мнению, это то, что вы действительно ищете, вы также должны взглянуть на приложения, которые я упомянул, и / или какую-то другую библиотеку i18n.

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