类型为"声音"的参数不能分配给类型为"SetStateAction"的参数<undefined>



我正在使用typescript和expo-cli编写一个简单的react本机应用程序。我已经导入了expo av,但在尝试播放音频时遇到了一些问题。我遵循[this guide][1],但它是用javascript编写的,我想这就是问题所在,因为它抱怨类型。

import { Audio } from "expo-av";

export const useAudio = () => {
const [sound, setSound] = useState();
const playSound = async () => {
const { sound } = await Audio.Sound.createAsync( // this line causes the error
require("../assets/sound/ding.mp3")
);
setSound(sound);
await sound.playAsync();
}
};
[![error message][2]][2]

[1]: https://docs.expo.dev/versions/v42.0.0/sdk/audio/
[2]: https://i.stack.imgur.com/PqDgC.png

由于将sound状态初始化为未定义(useState()),Typescript不允许将sound设置为任何其他类型。

我建议你这样键入sound

const [sound, setSound] = useState<Audio.Sound|null>(null);

因此,sound最初是null,但可以基于组件的逻辑设置为Audio.Sound类型的另一对象。这要求您在使用其任何属性之前始终小心CCD_ 8是否为CCD_。

例如:

sound.play() // first check if it isn't null!

最新更新