有没有一种方法可以在Typescript和Angular中为“ let variable”类型键入IDE提示?

Ant*_*sss 5 intellij-idea angular

有像这样的标记

    <mat-cell *matCellDef="let request">
         <a [href]="request.url" target="_blank">{{request.requestId}}</a>
    </mat-cell>
Run Code Online (Sandbox Code Playgroud)

我可以以某种方式键入IDE的请求类型Request吗?我在这里使用IntelliJ。

请注意,我这里使用的是Angular Material表,因此request在此处声明组件不是一个选择,因为它纯粹是模板变量。它包含在每次行迭代时由组件本身内部提供的行数据。

知道为什么不推荐使用它,但是可能是因为它看起来像无效的标记-很好,它是MatDataTable组件中使用的完全有效的标记。

小智 6

作为

tableDataSource: MatTableDataSource<ToDoInterface>;
Run Code Online (Sandbox Code Playgroud)

不输入模型,

这个:

<ng-container matColumnDef="toDo">
  <th mat-header-cell *matHeaderCellDef mat-sort-header>ToDo</th>
  <td mat-cell *matCellDef="let model">
    <ng-container *ngIf="assertItemType(model) as toDoModel">
      {{toDoModel.toDo}}
    </ng-container>
  </td>
</ng-container>
Run Code Online (Sandbox Code Playgroud)

在哪里:

assertItemType(item: ToDoInterface): ToDoInterface {
  return item;
}
Run Code Online (Sandbox Code Playgroud)

作品。

但不确定这是否是最好的方法

  • 添加额外的方法调用是不值得的 (5认同)

SrA*_*Axi -3

现在我终于明白了这个问题(在OP编辑之后)

声明时,您不能在模板中指定类型*matCellDef="let request",但是,该局部变量应该已经在您的组件中键入。

当使用 AM Table 时,我们会有这样的东西,对吧?

<mat-table [dataSource]="dataSource">
    <ng-container matColumnDef="name">
      <mat-header-cell *matHeaderCellDef> Name </mat-header-cell>
      <mat-cell *matCellDef="let user"> {{user.name}} </mat-cell>
    </ng-container>
</mat-table>
Run Code Online (Sandbox Code Playgroud)

我们不能输入局部user变量,但可以输入 dataSource.

所以,想象一下我们有这个界面:

export interface User {
    name: string;
    email: string;
}
Run Code Online (Sandbox Code Playgroud)

我们dataSource是用户的集合。然后我们会这样输入:

dataSource: User[] = this.getUsers();
Run Code Online (Sandbox Code Playgroud)

现在我们告诉编译器 的每个元素的dataSource类型都是User