SAPUI 5 TypeScript错误:扩展@sapui5/types组件接口

8zzbczxx  于 2023-08-08  发布在  TypeScript
关注(0)|答案(1)|浏览(93)
  • 这个问题与TypeScript有关,但我相信向SAPUI 5社区寻求帮助可能会找到解决方案。

我正在使用Typescript处理一个SAPUI 5项目,我已经将@sapui5/types包作为开发依赖项安装。我在Component.ts文件中定义了一个名为getContentDensityClass()的函数,如下所示:

// webapp/Component.ts

public getContentDensityClass() {
    // ...
    return this._sContentDensityClass;
}

字符串
在我的App.controller.ts中,我想像这样使用这个函数:

// webapp/controller/App.controller.ts

public onMessagePopoverPress(oEvent: Event) {
    // ...
    syncStyleClass(this.getView()
                   .getController()
                   .getOwnerComponent()
                   .getContentDensityClass(), // here is the error
                   this.getView(),
                   oMessagePopover);
    // ...
}


但是,TypeScript会引发以下错误:

  • getContentDensityClass does not exist on getOwnerComponent of type Component

为了解决这个问题,我尝试从@sapui5/types扩展Component类型,如下所示:

declare module "@sapui5/types" {
    export interface Component {
        getContentDensityClass(): string;
    }
}


尽管进行了此尝试,但错误仍然存在。

xytpbqjk

xytpbqjk1#

getOwnerComponent返回通用UI5组件类。但是,自定义方法getContentDensityClass是在自定义组件类中定义的。
你应该AssertgetOwnerComponent的类型,例如:

import AppComponent from "../Component" // path to your Component.ts;

...

(this.getView()
   .getController()
   .getOwnerComponent() as AppComponent)
   .getContentDensityClass()

字符串
如果你不想每次都这样做,我建议你把它放在你的BaseController中

import AppComponent from "../Component";

getOwnerComponent(): AppComponent {
    return super.getOwnerComponent() as AppComponent;
}


那么你的原始代码应该不需要任何修改就可以工作。

相关问题