具有父/子关系的角度组件中的通用类型定义

时间:2020-07-01 06:57:52

标签: angular typescript

我正在尝试创建一个像这样的组件:

<dropdown formControlName="car">
  <dropdown-option value="volvo"></dropdown-option>
  <dropdown-option value="bmw"></dropdown-option>
  <dropdown-option value="peugeot"></dropdown-option>
  <!-- etc -->
</dropdown>

我对下拉组件的定义如下:

export component DropdownComponent<T> {
  possibilities: Array<T>
}

我对下拉选项组件的定义如下:

export component DropdownOptionComponent<T> {
  @Input() value: T
}

我的DropdownOptionComponent是否可以推断T的通用类型DropdownComponent并将DropdownOptionComponent的可用选项限制为满足通用T的任何内容?

编辑:为了进一步阐明我要解决的问题,我希望我的模板足够聪明,可以看到给定父级定义的模板中,它将检查其是否有效。

编辑2:更好的例子:

// mycomponent.component.ts
export class MyComponent {
  data: Array<{param1: number, param2: string}>;
}
<!-- mycomponent.component.html -->
<table [dataSource]="data">
  <table-entry *myTemplateDirective="let entry">
    <!-- do something with entry -->
  </table-entry>
</table>

是否有可能根据表组件中entry的输入来键入data

在代码示例中编辑3:错字

1 个答案:

答案 0 :(得分:0)

即使您在将值从父组件传递给子组件时声明了子组件具有通用类型,默认情况下,您也会获得父组件本身使用的确切类型。您无需再次明确执行。

如果您看下面的示例,则使用布尔值声明属性的值。 Typescript能够分辨出该属性与哪种类型相关联,并且以类似的方式适用于您的用例

Example Type Casting