javascript - Typescript: "as HTMLElement" türünü kullanırken beklenmeyen token


Typescript'e yeni geldim. forEach döngüsü içinde HTMLElement türünü kullanırken aşağıdaki hatayı alıyorum:

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) {

Bu eğitimi @Ryan Bigg tarafından hazırlanan şu kaynaktan takip ediyorum: https://egghead.io/blog/rails-graphql-typescript-react-apollo

Kodum burada:

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,
        )
      }
    })
  })
}

Her türlü yardım için teşekkürler!

Cevap #1

Hata mesajına bakılırsa - ERROR in ./app/javascript/mount.jsx) - .tsx dosyası kullanmıyorsunuz ve as anahtar kelimesi geçerli Javascript değildir, bu yüzden ya as HTMLElement kısmını kaldırmalısınız çünkü Javascript tiplerle ilgilenmez ya da dosya adını mount.tsx olarak değiştirin - eğer derleme zincirinizde Typescript derleyici kullanıyorsanız.