angular - 在 Angular 12 中使用 Observable 时出现 TS(2322) 错误
问题描述
我是 Angular 12 框架的新手。我正在学习使用Observable
该类异步查询固定数据的教程;ts(2322)
由于在训练中使用 Angular 8 导致的版本差异,我收到了错误。服务、模块和数据源的摘要如下:
/* movie.service.ts */
export class MovieService
{
...
getMovie( id: number ) : Observable<Movie>
{
/* TS(2322) error occurs in the following line of code. */
return of( Movies.find( movie => movie.id === id ) );
}
}
/* movie.datasource.ts */
import { Movie } from "./movie";
export const Movies: Movie[] = [
{ id: 1, name: "movie1", imageUrl: "1.jpg" },
{ id: 2, name: "movie2", imageUrl: "2.jpg" }
];
/* movie.ts */
export class Movie
{
id!: number;
name!: string;
imageUrl!: string;
}
文件中的getMovie()
方法movie.service.ts
输出以下错误:
Type 'Observable<Movie | undefined>' is not assignable to type 'Observable<Movie>'.
Type 'Movie | undefined' is not assignable to type 'Movie'.
Type 'undefined' is not assignable to type 'Movie'.ts(2322)
我知道这个问题是由 TypeScript 的类型安全规则引起的。我怎么解决这个问题?
预先感谢您的帮助。
解决方案
好吧,错误是可以自我描述的。Movies.find()
如果找到或undefined
以其他方式返回电影。最简单的适应方法是完全期望:
getMovie( id: number ) : Observable<Movie | undefined>
{
return of( Movies.find( movie => movie.id === id ) );
}
或者,您可以检查 的结果find()
,如果它为 null - 返回new Movie()
或抛出异常
推荐阅读
- xamarin.forms - 在 Xamain.Forms 上获取最近通话列表
- intellij-idea - 如何创建一个复制我正在工作的 IntelliJ 项目的 sbt 构建文件?
- r - 来自异质线性混合效应模型包 (lcmm) 的主题特定预测
- postgresql - npgsql 无法从容器内部连接到 Unix 套接字
- java - tarsosdsp 运行时无法在其他应用上使用麦克风
- python - 如何使用 OpenGL 的顶点在 MayaVi 中绘制 3D 模型?
- laravel - laravel 中的 model->name 和 model() 有什么区别?
- python - (Selenium,Python)连接 URL + CSV 数据,然后在新选项卡中打开每个 URL
- python - 在 pip 中安装时的 SSL 证书
- python - 如果堆栈在python中不为空,则插入条件