mediainfo.js
mediainfo.js copied to clipboard
Typescript Typing Error
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 😊
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 });