尝试访问 AVPlaybackStatus 的错误 属性
Error trying to access the error property of AVPlaybackStatus
我是 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
布尔字段,但要使其正常工作,您需要启用 strictNullChecks
。除此之外,你处理它的方式完全没问题。
我是 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
布尔字段,但要使其正常工作,您需要启用 strictNullChecks
。除此之外,你处理它的方式完全没问题。