#typescript
#машинописный текст
Вопрос:
Я пытаюсь объявить свойство в моем интерфейсе как
export interface GridColumn {
isRequired?: boolean | (row: any) => boolean
}
Я получаю сообщение об ошибке false is not assignable to type (row: any) => boolean
Может ли кто-нибудь поправить меня, если это неправильный способ объявления?
Комментарии:
1. Какой код показывает эту ошибку? Конечно, не определение интерфейса.
2. Поместите круглые скобки вокруг типа функции: typescriptlang.org/play ? #code/. … Обратите внимание, что это будет действительно раздражающим свойством для использования, вы будете постоянно проверять «нужно ли мне вызывать это или нет?»
3. Не делайте этого. Я знаю, что typescript позволит вам, но просто не делайте этого.
Ответ №1:
Для этого случая требуются парантезы
export interface GridColumn {
isRequired?: boolean | ((row: any) => boolean)
}
const obj: GridColumn = { isRequired: true };
const obj2: GridColumn = { isRequired: () => true };
Я бы посоветовал написать вспомогательную функцию, когда вам нужно проверить это свойство, поскольку это может быть довольно сложно
function isRequired(obj: GridColumn, row?: any): boolean {
return typeof obj.isRequired === "function" ? obj.isRequired(row) : obj.isRequired ?? false;
}
Комментарии:
1. Спасибо, что объявление с помощью () сработало.