Скажем, например, у меня есть интерфейс, который определяет логическое значение и необязательную строку:
Пример
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?];
}
Может быть что-то очевидное, что я упускаю, но я просто не понимаю.
С именем вашего интерфейса я бы прямо поместил в него свойства:
interface IError {
errorOccurred: boolean;
message?: string;
}
и ваш объект error
должен быть типа IError
.
А для реализации этого интерфейса можно задать независимо оба параметра...
В TypeScript есть существующий запрос функции для именованных кортежей, но в настоящее время они не поддерживаются.
Тем временем вы можете либо использовать безымянный кортеж, как у вас, либо использовать объект:
interface IError {
errorOccurred: boolean;
message?: string;
}
Другой вариант, в зависимости от вашего варианта использования, может заключаться в том, чтобы errorOccurred
быть неявным в зависимости от того, существует ли вообще объект ошибки или есть ли у него message
.