我使用的是17号角,我有以下问题:

我有一个IDetail接口,它有一些属性:

export interface IDetails {
  summary: Summary;
  description: string;
}

我还有另一个接口,它继承自IDetail并实现一个特定于它的新属性.

export interface ICertificate extends IDetails {
  url: string;
}

在我的Angular 组件中,我通过INPUT接收此接口的数组:

export class DetailsComponent implements OnInit {
  @Input({required: true}) public inputDetail: Array<IDetails> = [];
}

现在,在html中,当接收到这个数组时,我执行一个for循环,并将url字段传递给子组件

@for (item of inputDetail; track $index) {
    ...
      @defer (on viewport) {
        <app-validation [inputValidation]="**item?.url**"></app-validation>
      } @placeholder {
        <section>
          <h4>Loading...</h4>
        </section>
      } @error {
        <section>
          <h4>Error, Try Again.</h4>
        </section>
      }
}

在我试图传递url属性的这一行上,出现了错误:

类型‘IDetail|ICertifate’上不存在属性‘url’. 类型‘IDetail’上不存在属性‘url’

如何解决此问题并正确访问属性并将其发送给子组件?

我try 将两种类型的值放入这个接收到的属性中.没有成功.

export class DetailsComponent implements OnInit {
  @Input({required: true}) public inputDetail: Array<IDetails> | Array<ICertificate> = [];
}

推荐答案

在详细信息组件上直接使用ICertificate,因为属性可能在那里,也可能不在那里,将url属性设置为?,以便允许空值和未定义,现在您可以直接使用ICertificate,而不必担心其他接口!

export interface ICertificate extends IDetails {
  url?: string;              // <- changed here!
}

要消除编译器错误,只需给出空字符串作为对@Input的判断,这样错误就会消失!

@for (item of inputDetail; track $index) { @defer (on viewport) {
<app-validation [inputValidation]="item.url || ''"></app-validation> <!-- changed here -->
} @placeholder {
<section>
  <h4>Loading...</h4>
</section>
} @error {
<section>
  <h4>Error, Try Again.</h4>
</section>
} }

Stackblitz Demo

Typescript相关问答推荐

React Hook中基于动态收件箱定义和断言回报类型

类型断言添加到类型而不是替换

如何使类型只能有来自另一个类型的键,但键可以有一个新值,新键应该抛出一个错误

如何判断输入是否是TypeScript中的品牌类型?

无法将select选项的值设置为ngFor循环中的第一个元素

如何使用泛型类型访问对象

如何在TypeScrip面向对象程序设计中用方法/属性有条件地扩展类

Redux—Toolkit查询仅在不为空的情况下添加参数

如何在另一个参数类型中获取一个参数字段的类型?

在Typescript 中,有没有`index=unfined的速记?未定义:某个数组[索引]`?

是否可以针对联合类型验证类型属性名称?

以Angular 执行其他组件的函数

(TypeScript)TypeError:无法读取未定义的属性(正在读取映射)"

将带有样式的Reaction组件导入到Pages文件夹时不起作用

如何在打字角react 式中补齐表格组

如何从抽象类的静态方法创建子类的实例?

替换typescript错误;X类型的表达式可以';t用于索引类型Y;带有未定义

组件使用forwardRef类型脚本时传递props

通过函数传递确切的类型,但验证额外的字段

在 TypeScript 中实现类型级别深度优先搜索