Именованное определение машинописного текста в массиве интерфейса

Скажем, например, у меня есть интерфейс, который определяет логическое значение и необязательную строку:

Пример

interface IError {
  error: [boolean, string?];
}

Теперь позже в коде я хочу его использовать:

if (somethingTrue) {
  error: [false]
} else {
  error: [true, "Error occurred because of foo"]
}

У меня это работает. Однако я хотел бы добавить больше контекста в интерфейс. Логическое значение должно называться errorOccured, а строка должна называться message.

Пытался

Я думал о следующем:

interface IError {
  error: [errorOccured: boolean, message: string?];
}

Может быть что-то очевидное, что я упускаю, но я просто не понимаю.

Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
0
0
300
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

С именем вашего интерфейса я бы прямо поместил в него свойства:

interface IError {
  errorOccurred: boolean;
  message?: string;
}

и ваш объект error должен быть типа IError.

А для реализации этого интерфейса можно задать независимо оба параметра...

Ответ принят как подходящий

В TypeScript есть существующий запрос функции для именованных кортежей, но в настоящее время они не поддерживаются.

Тем временем вы можете либо использовать безымянный кортеж, как у вас, либо использовать объект:

interface IError {
  errorOccurred: boolean;
  message?: string;
}

Другой вариант, в зависимости от вашего варианта использования, может заключаться в том, чтобы errorOccurred быть неявным в зависимости от того, существует ли вообще объект ошибки или есть ли у него message.

Другие вопросы по теме