gpt4 book ai didi

typescript - 尝试访问 AVPlaybackStatus 的错误属性时出错

转载 作者:行者123 更新时间:2023-12-04 08:04:56 30 4
gpt4 key购买 nike

我是 TypeScript 的新手,正在尝试使用 expo-av用于音频播放。
以下代码给了我一个错误:TS2339: Property 'error' does not exist on type 'AVPlaybackStatus'.

const { sound, status } = await Audio.Sound.createAsync(track.mp3);
if (status.isLoaded) {
console.info(status.durationMillis);
}
else {
console.error("track not loaded", status.error);
}
我看了 status的定义并发现:
export type AVPlaybackStatus =
| {
isLoaded: false;
androidImplementation?: string;
error?: string; // populated exactly once when an error forces the object to unload
}
| {
isLoaded: true;
androidImplementation?: string;

uri: string;

progressUpdateIntervalMillis: number;
durationMillis?: number;
positionMillis: number;
playableDurationMillis?: number;
seekMillisToleranceBefore?: number;
seekMillisToleranceAfter?: number;

shouldPlay: boolean;
isPlaying: boolean;
isBuffering: boolean;

rate: number;
shouldCorrectPitch: boolean;
volume: number;
isMuted: boolean;
isLooping: boolean;

didJustFinish: boolean; // true exactly once when the track plays to finish
};
我以前从未见过这个结构,但我猜这是一个 union or intersection type (?)。
我如何访问 status.error ?使用此类类型的典型习语/构造是什么?

最佳答案

该模式是判别联合( docs ),其中 TypeScript 可以根据每个替代项不同的字段准确确定类型。在这种情况下,它是 isLoaded bool 字段,但要使其正常工作,您确实需要 strictNullChecks启用。除此之外,您处理它的方式完全没问题。

关于typescript - 尝试访问 AVPlaybackStatus 的错误属性时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66265142/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com