最近,我将TypeScript添加到我的SAPUI5项目中,类型的ESLint消息出现了问题。
考虑这个简单的例子:

这段很小的代码显示了错误“任何类型值的不安全返回”,但我不知道原因。此函数中的所有内容都有一个类型。这是来自包@sapui5 5/ts-types esm的UIComponent.getRouterFor的描述:

有人能告诉我我做错了什么吗?类型正确吗?
发布于 2022-06-20 10:37:17
事实证明,衬里错误来自于VSCode ESlint扩展。
由于我们在CAP项目中使用on文件夹,其中包含CDS开发文件夹和类型记录以及应用程序资源的文件夹,所以扩展被混淆了。有两个.eslintrc.json文件。一个在根级(标记为root:true),另一个用于类型记录UI5应用程序。
我设置扩展名的工作目录设置如下
"eslint.workingDirectories": ["./app", "./srv", "./db"],现在起作用了。
谢谢你@的意见。
发布于 2022-06-17 05:34:37
您使用的是什么版本的UI5类型和ESLint?当我在BaseController中编写相同的代码时,我看到了另一个问题:@typescript-eslint/no-unnecessary-type-assertion
public getRouter(this: BaseController) {
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
return UIComponent.getRouterFor(this) as Router;
}它将被自动修复为:
public getRouter(this: BaseController) {
return UIComponent.getRouterFor(this);
}由于类型推断,不需要进行转换。
顺便说一句:在我的例子中,我使用的是ESLint 8.17.0和OpenUI5 1.102.1。
发布于 2022-06-14 08:21:17
由于getRouterFor()方法已经有声明的类型,所以类型将由类型记录推断。你能试着这样做吗?
public getRouter(this: BaseController) : Router {
return UIComponent.getRouterFor(this)
}https://stackoverflow.com/questions/72613611
复制相似问题