Typescript: Как добавить безопасность типов в свойствах объекта? - PullRequest
0 голосов
/ 21 января 2019

У меня есть следующее:

type CommandTypes = 'one' | 'two' | 'three';
const CONST = {
  commands: {
    a: 'one',
    b: 'two',
    c: 'error'
  },
};

Есть ли способ заставить все команды определенного типа?

Сейчас TypeScript говорит мне, что a, b и c имеют тип строка , но я хочу, чтобы эти свойства имели тип CommandTypes , поэтомучто разработчик не может указать произвольную строку.Я хочу, чтобы TypeScript мог отловить ошибку, что c недопустим, поскольку он не принадлежит разрешенным типам CommandTypes.

Если я разбью определение CONST следующим образом:

type CommandTypes = 'one' | 'two' | 'three';
const commands : CommandTypes = {
  a: 'one',
  b: 'two',
  c: 'error'
}

const CONST = {
  commands,
};

Тогда это действительно перехватывает ошибку с c , однако теперь я также теряю автозаполнение в коде Visual Studio.Если я наберу CONST.commands. Я не получаю никакого автозавершения здесь сейчас, где, как будто я оставляю определение, как показано в верхней части поста, тогда я получаю автозаполнение.

1 Ответ

0 голосов
/ 21 января 2019

Record<CommandTypes, string> даст вам объект, ключи которого являются распределенным объединением CommandType, а значения должны быть строками. Примечание: у вас может быть только один тип с правой стороны, если вам нужны разные типы для каждой клавиши, вам придется читать документацию по типам сценариев для сопоставленных типов

...