类型 'TestComponent' 与类型 'CmsComponent' 没有共同的属性
Type 'TestComponent' has no properties in common with type 'CmsComponent'
我有一组在 CMS 中创建的自定义组件。自定义组件扩展了 BannerComponent 并拥有自己的 属性 称为“颜色”。
我创建了模型:
import { BannerComponent } from '@spartacus/storefront';
export class TestComponent extends BannerComponent{
color?: string;
}
我正在尝试从 Angular 组件获取数据。
构造函数(私有组件数据:CmsComponentData,
私有 cmsService: CmsService) { }
执行此操作时出现以下错误:
类型 'TestComponent' 与类型 'CmsComponent' 没有共同的属性。
如何解决这个问题并在 angular 组件中获取自定义组件的数据。
您遇到的错误来自打字稿编译器。在那次检查期间,没有可用的信息来了解您实际上期待的是 BannerComponent
界面。请记住,typescript 正在执行静态代码验证。
要让编译器知道预期的接口,您需要告诉它。默认情况下,CmsComponentData
class 使用 CmsComponent
接口。但是,您可以通过将接口传递给 CmsComponentData
:
来传递自定义接口
export interface TestComponent extends CmsBannerComponent{
color?: string;
}
constructor(
private componentData: CmsComponentData<TestComponent>,
private cmsService: CmsService
) { }
型号Class:
import { BannerComponent } from '@spartacus/storefront';
export interface TestComponent extends BannerComponent{
color?: string;
}
组件:
import { Component, OnInit } from '@angular/core';
import { CmsService } from '@spartacus/core';
import { CmsComponentData } from '@spartacus/storefront';
import { TestComponent } from 'src/app/models/service-tile.model';
@Component({
selector: 'app-service-tile',
templateUrl: './service-tile.component.html',
styleUrls: ['./service-tile.component.scss']
})
export class ServiceTileComponent implements OnInit {
constructor(private componentData: CmsComponentData<TestComponent>,
private cmsService: CmsService) { }
ngOnInit(): void {
}
}
来自 hybris 的回复:
{
"slotId" : "Section1",
"slotUuid" : "yyyy",
"position" : "ServiceTileSection",
"name" : "Service Tile Section",
"slotShared" : false,
"components" : {
"component" : [ {
"uid" : "TestComponent",
"uuid" : "xxxx",
"typeCode" : "ServiceTileBannerComponent",
"modifiedtime" : "2020-10-07T21:18:28.4+05:30",
"name" : "Component",
"container" : "false",
"external" : "false",
"color" : "RED",
"media" : {
"code" : "Tile1.jpg",
"mime" : "image/png",
"altText" : "Car Trade In",
"url" : "/medias/?context=3NGMyZjRkZTU4YTMz"
},
"headline" : "Test"
},
{
component2
},
{
component3
}
]
}
}
这正是我在示例中使用的 类。
我有一组在 CMS 中创建的自定义组件。自定义组件扩展了 BannerComponent 并拥有自己的 属性 称为“颜色”。
我创建了模型:
import { BannerComponent } from '@spartacus/storefront';
export class TestComponent extends BannerComponent{
color?: string;
}
我正在尝试从 Angular 组件获取数据。
构造函数(私有组件数据:CmsComponentData, 私有 cmsService: CmsService) { }
执行此操作时出现以下错误:
类型 'TestComponent' 与类型 'CmsComponent' 没有共同的属性。
如何解决这个问题并在 angular 组件中获取自定义组件的数据。
您遇到的错误来自打字稿编译器。在那次检查期间,没有可用的信息来了解您实际上期待的是 BannerComponent
界面。请记住,typescript 正在执行静态代码验证。
要让编译器知道预期的接口,您需要告诉它。默认情况下,CmsComponentData
class 使用 CmsComponent
接口。但是,您可以通过将接口传递给 CmsComponentData
:
export interface TestComponent extends CmsBannerComponent{
color?: string;
}
constructor(
private componentData: CmsComponentData<TestComponent>,
private cmsService: CmsService
) { }
型号Class:
import { BannerComponent } from '@spartacus/storefront';
export interface TestComponent extends BannerComponent{
color?: string;
}
组件:
import { Component, OnInit } from '@angular/core';
import { CmsService } from '@spartacus/core';
import { CmsComponentData } from '@spartacus/storefront';
import { TestComponent } from 'src/app/models/service-tile.model';
@Component({
selector: 'app-service-tile',
templateUrl: './service-tile.component.html',
styleUrls: ['./service-tile.component.scss']
})
export class ServiceTileComponent implements OnInit {
constructor(private componentData: CmsComponentData<TestComponent>,
private cmsService: CmsService) { }
ngOnInit(): void {
}
}
来自 hybris 的回复:
{
"slotId" : "Section1",
"slotUuid" : "yyyy",
"position" : "ServiceTileSection",
"name" : "Service Tile Section",
"slotShared" : false,
"components" : {
"component" : [ {
"uid" : "TestComponent",
"uuid" : "xxxx",
"typeCode" : "ServiceTileBannerComponent",
"modifiedtime" : "2020-10-07T21:18:28.4+05:30",
"name" : "Component",
"container" : "false",
"external" : "false",
"color" : "RED",
"media" : {
"code" : "Tile1.jpg",
"mime" : "image/png",
"altText" : "Car Trade In",
"url" : "/medias/?context=3NGMyZjRkZTU4YTMz"
},
"headline" : "Test"
},
{
component2
},
{
component3
}
]
}
}
这正是我在示例中使用的 类。