'Sound' 类型的参数不可分配给 'SetStateAction<undefined>' 类型的参数
Argument of type 'Sound' is not assignable to parameter of type 'SetStateAction<undefined>'
我正在使用 typescript 和 expo-cli 编写一个简单的 react-native 应用程序。
我已经导入了 expo-av,但在尝试播放音频时遇到了一些问题。
我正在关注 [本指南][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
类型的另一个对象。这要求您在使用其任何属性之前始终注意 sound
是否为 null
。
例如:
sound.play() // first check if it isn't null!
我正在使用 typescript 和 expo-cli 编写一个简单的 react-native 应用程序。 我已经导入了 expo-av,但在尝试播放音频时遇到了一些问题。 我正在关注 [本指南][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
类型的另一个对象。这要求您在使用其任何属性之前始终注意 sound
是否为 null
。
例如:
sound.play() // first check if it isn't null!