Машинопись: неожиданный токен при использовании типа «как HTMLElement»

#javascript #reactjs #typescript

Вопрос:

Я новичок в машинописи. Я получаю следующую ошибку при использовании типа HTMLElement в forEach цикле:

 ERROR in ./app/javascript/mount.jsx
Module build failed (from ./node_modules/babel-loader/lib/index.js):
SyntaxError: /Users/me/projects/mathllc/app/javascript/mount.jsx: Unexpected token, expected "," (7:34)

   5 |     const mountPoints = document.querySelectorAll('[data-react-component]')
   6 |     mountPoints.forEach((mountPoint) => {
>  7 |       const dataset = (mountPoint as HTMLElement).dataset
     |                                   ^
   8 |       const componentName = dataset['reactComponent']
   9 |       const Component = components[componentName]
  10 |       if (Component) {
 

Я следую этому уроку @Ryan Bigg : https://egghead.io/blog/rails-graphql-typescript-react-apollo

Мой код здесь:

 import ReactDOM from 'react-dom'
export default function mount(components = {}) {
  document.addEventListener('DOMContentLoaded', () => {
    const mountPoints = document.querySelectorAll('[data-react-component]')
    mountPoints.forEach((mountPoint) => {
      const dataset = (mountPoint as HTMLElement).dataset
      const componentName = dataset['reactComponent']
      const Component = components[componentName]
      if (Component) {
        const props = JSON.parse(dataset['props'])
        ReactDOM.render(<Component {...props} />, mountPoint)
      } else {
        console.log(
          'WARNING: No component found for: ',
          dataset.reactComponent,
          components,
        )
      }
    })
  })
}
 

Спасибо за любую помощь!

Комментарии:

1. Есть ли у вашего кода import * as React from "react"; ? Если нет, то это может быть причиной.

Ответ №1:

Глядя на ошибку — ERROR in ./app/javascript/mount.jsx ) — похоже, что вы не используете .tsx файл, и ключевое as слово не является допустимым Javascript, поэтому вам следует либо удалить as HTMLElement , потому что Javascript не заботится о типах, либо изменить имя файла на mount.tsx — если вы используете компилятор машинописного текста в своей цепочке сборки.