Как справиться возможно неопределенным в машинописи?

У меня проблема с ошибкой TS2322:

Тип (string | undefined)[] нельзя назначить типу string[]

Это мой код:

 const keys: string[] = objectList
      .map(obj => obj.Key)
      .filter(key => { return !!key;});

где Key является необязательным параметром своего класса (S3.Types.ObjectList для полного раскрытия).

Я на 100% уверен, что в ключах нет неопределенного элемента, так как я удаляю их с помощью своего фильтра.

Как бы вы сделали, чтобы удалить эту ошибку?

С уважением, Жюльен

1 ответ

К сожалению, Typescript не передает информацию о проверке filter в любом случае, так что единственное, что мы можем сделать, это использовать ненулевое утверждение:

const keys: string[] = objectList
  .map(obj => obj.Key!) // ! means we know this is not null, we won't actually know until the next check 
  .filter(key => !!key);

Или более последовательная версия, где мы утверждаем только после проверки:

const keys: string[] = objectList
  .filter(obj => !!obj.Key)
  .map(obj => obj.Key!) 
Другие вопросы по тегам