Получение «Неверный звонок» при использовании require с Typescript и Expo - PullRequest
1 голос
/ 08 апреля 2019

Я пытаюсь воспроизвести звук в приложении, созданном с помощью expo-cli.

Код написан на машинописном тексте, и код, вызывающий сбой, выглядит следующим образом, взятый из экспозиции .Документация .io :

import * as React from 'react'
import { WorkoutComponent } from "./WorkoutExecutor";
import { Audio } from 'expo';

export default class AudioPlayer {

    private async playAudio(fileName: string) {
        console.log("Playing Audio: " + fileName);
        const soundFile = './assets/sounds/' + fileName + '.mp3';
        try {
            const { sound: soundObject, status } = await Audio.Sound.createAsync(
              require(soundFile),
              { shouldPlay: true }
            );
            // Your sound is playing!
          } catch (error) {
              console.log(error);
            // An error occurred!
          }

    }
[...]
}

Когда приложение загружается, оно выдает следующую ошибку, даже до того, как оно выходит на экран со звуком

[...]\src\AudioPlayer.ts:Invalid call at line 13: require(soundFile)

Я понимаю, чтоНапример, с javascript, а не с машинописью, но чего мне не хватает?

Мой tsconfig.json - тот, что из примера с машинописью, и выглядит так:

{
  "compilerOptions": {
    "baseUrl": "./src",
    "esModuleInterop": true,
    "experimentalDecorators": true,
    "forceConsistentCasingInFileNames": true,
    "importHelpers": true,
    "jsx": "react-native",
    "module": "es2015",
    "moduleResolution": "node",
    "noEmitHelpers": true,
    "noImplicitReturns": true,
    "noUnusedLocals": true,
    // Using the type definitions in @types/expo becuase they are still better than the ones provided by expo. See SvgScreen.tsx and SystemFontsScreen.tsx.
    "paths": {
      "expo": [
        "../node_modules/@types/expo",
        "../node_modules/expo"
      ],
    },
    "skipLibCheck": true,
    "strict": true,
    "target": "es2017"
  },
  "exclude": [
    "node_modules"
  ]
}

1 Ответ

2 голосов
/ 11 апреля 2019

Я получил помощь через Twitter, и проблема в том, что require() не работает с динамическими значениями.Это также объясняет, почему ошибки произошли еще до того, как приложение было загружено, поскольку оно пыталось разрешить require во время сборки или загрузки, а не во время выполнения, как я думал.

...