angular - 打字稿函数中的错误-函数缺少结束返回语句并且返回类型不包括“未定义”
问题描述
我在 createBreadcrumbs 函数中遇到错误('函数缺少结束返回语句并且返回类型不包括 'undefined'.ts(2366)')。请解释为什么我收到错误以及如何解决?
export class BreadcrumbComponent implements OnInit {
static readonly ROUTE_DATA_BREADCRUMB = 'breadcrumb';
readonly home = {icon: 'pi pi-home', url: 'home'};
menuItems!: MenuItem[];
constructor(private router: Router, private activatedRoute: ActivatedRoute) {}
ngOnInit(): void {
this.router.events
.pipe(filter(event => event instanceof NavigationEnd))
.subscribe(() => this.menuItems = this.createBreadcrumbs(this.activatedRoute.root));
}
private createBreadcrumbs(route: ActivatedRoute, url: string = '#', breadcrumbs: MenuItem[] = []): MenuItem[] {
const children: ActivatedRoute[] = route.children;
if (children.length === 0) {
return breadcrumbs
}
for (const child of children) {
const routeURL: string = child.snapshot.url.map(segment => segment.path).join('/');
if (routeURL !== '') {
url += `/${routeURL}`;
}
const label = child.snapshot.data[BreadcrumbComponent.ROUTE_DATA_BREADCRUMB];
if (label !== null || label !== undefined) {
breadcrumbs.push({label, url});
}
return this.createBreadcrumbs(child, url, breadcrumbs);
}
}
}
解决方案
看来Typescript的编译器不明白,如果数组的长度不为零的话,肯定会入贷并返回一个值。
所以,简单的灵魂是这样的:
private createBreadcrumbs(route: ActivatedRoute, url: string = '#', breadcrumbs: MenuItem[] = []): MenuItem[] {
const children: ActivatedRoute[] = route.children;
for (const child of children) {
const routeURL: string = child.snapshot.url.map(segment => segment.path).join('/');
if (routeURL !== '') {
url += `/${routeURL}`;
}
const label = child.snapshot.data[BreadcrumbComponent.ROUTE_DATA_BREADCRUMB];
if (label !== null || label !== undefined) {
breadcrumbs.push({label, url});
}
return this.createBreadcrumbs(child, url, breadcrumbs);
}
// if (children.length === 0)
return breadcrumbs;
}
推荐阅读
- webdriver - 如何在 C# 中运行 Selenium Brave Web 浏览器 webdriver?
- javascript - 我们可以在特定函数中加载外部 Javascript
- tesseract - Tesseract 无法识别数字,即使重新缩放、char white_listing 和过滤
- c - 如何在C中的系统函数中给出脚本的相对路径?
- ios - 当用户杀死 iOS 应用程序时唤醒应用程序而不使用 VoIP
- asp.net-core - 当实现 Serilog 调试模式不起作用 [.NET Core 3.1]
- python - 获取数据框中列的比例值 - Pandas
- arrays - 在perl中访问数组元素时@和$有什么区别?
- python - 有什么方法可以在数组中重复一个字母吗?
- odoo - Odoo`sudo`正确的日志