Как объявить свойство типа boolean или () => boolean

#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. Спасибо, что объявление с помощью () сработало.