Проблема типа потока с помощью string.match () - PullRequest
0 голосов
/ 25 сентября 2019

В моей программе есть скрипт, который в конечном итоге вызывает функцию, которая принимает строку и запускает .match(regex) для этой строки.


Согласно MDN:
String.prototype.match(regex) возвращает array тип данных, который мне нужен только для доступа к первому индексу [0]
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match



Во всех случаях, когда я пыталсяорганизовать этот скрипт, я получаю сообщение об ошибке:

"Невозможно получить findStationId(...)[0], поскольку в нулевом [1] отсутствует подпись индекса, объявляющая ожидаемый тип ключа / значения."

Организация функции не там, где у меня возникают проблемы, но с индексом [0].



Как правильно набирать текст, проверьте это иобъявить ожидаемые значения?

// @flow

type RssResults = Array<{
  title: string,
  contentSnippet: string
}>

const findStationId = (string: string): Array<any> | null => string.match(/([0-9]{5}|[A-Z\d]{5})/)

export default (rssResults: RssResults) => {
  const entries = []
  rssResults.forEach((entry) => {
    const observation = {}
    observation.title = entry.title
    const id = findStationId(entry.title)[0] // flow errors here on [0]
    observation.id = id.toLowerCase()

    // ...        

    entries.push(observation)
  })
return entries
}


.flowconfig

[ignore]
.*/test/*

[include]

[libs]

[lints]

[options]
module.file_ext=.js
module.file_ext=.jsx
module.file_ext=.json
module.file_ext=.css
module.file_ext=.scss
module.name_mapper.extension='css' -> 'empty/object'
module.name_mapper.extension='scss' -> 'empty/object'

[strict]

[untyped]
.*/node_modules/**/.*

Спасибо!

1 Ответ

1 голос
/ 25 сентября 2019

Если вы посмотрите на эту страницу MDN поближе, то там будет указано:

Массив, содержимое которого зависит от наличия или отсутствия глобального флага (g), или ноль, если совпадений не найдено.

со значением «ноль, если совпадений не найдено».быть важной частью здесь.null[0] не имеет смысла.Ваш собственный тип возврата Array<any> | null также упоминает об этом.

Так что либо ваш

const id = findStationId(entry.title)[0]

должен сделать

const match = findStationId(entry.title)
if (!match) throw new Error("No station ID found")
const id = match[0]

, либо вы должны изменить findStationId, чтобы запретитьnull возврат.

const findStationId = (string: string): Array<any> => {
  const match = string.match(/([0-9]{5}|[A-Z\d]{5})/)
  if (!match) throw new Error("No station ID found")
  return match
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...