mediainfo.js icon indicating copy to clipboard operation
mediainfo.js copied to clipboard

Typescript Typing Error

Open seanaye opened this issue 4 years ago • 1 comments

I'm following the simple example fairly closely except using typescript

import { Ref, WritableComputedRef, ref } from '@vue/composition-api'
import mediaInfo, { MediaInfo, Result } from 'mediainfo.js'

export default function useFileMetadata (file: Ref<File|null>|WritableComputedRef<File|null>) {
  const metadata = ref<Result|null>(null)

  async function handleFile (file: File, mediaInfo: MediaInfo) {
    const getSize = () => file.size

    const readChunk = (chunkSize: number, offset: number) => {
      return new Promise<Uint8Array>((resolve, reject) => {
        const reader = new FileReader()
        reader.onload = (event) => {
          if (!event.target) reject('Target not defined')
          else if (event.target.error) reject(event.target.error)
          else resolve(new Uint8Array(event.target.result as ArrayBuffer))
        }
        reader.readAsArrayBuffer(file.slice(offset, offset + chunkSize))
      })
    }

    try {
      const res = await mediaInfo.analyzeData(getSize, readChunk)
      if (!res) console.error('analyze response was undefined')
      else metadata.value = res
    } catch (err) {
      console.error(err)
    }
  }

  mediaInfo({}, (mi) => {
    if (file.value) handleFile(file.value, mi) // this line gives me an error
  })

  return {
    metadata
  }
}

The commented line give the following error

Argument of type 'import(".../node_modules/mediainfo.js/dist/types").MediaInfo' is not assignable to parameter of type 'import(".../node_modules/mediainfo.js/dist/mediainfo").MediaInfo'.
  Property 'wasmInstance' is missing in type 'import(".../node_modules/mediainfo.js/dist/types").MediaInfo' but required in type 'import(".../node_modules/mediainfo.js/dist/mediainfo").MediaInfo'.ts(2345)
mediainfo.d.ts(6, 22): 'wasmInstance' is declared here.

I haven't dug super deeply into source but I'm sticking fairly close to the example.

Awesome library btw this has helped me a lot. Many thanks 😊

seanaye avatar Sep 28 '20 00:09 seanaye

Experienced a similar problem when using this method. A quick fix was to use a type cast here:

mediainfo = <MediaInfo>await MediaInfoFactory({ format, coverData, full });

cosminc98 avatar Sep 30 '22 09:09 cosminc98