将参数转换为内部类

时间:2018-08-24 15:52:44

标签: angular typescript

我在组件中定义了一个内部类来保存视图模型,并且需要将http响应接口转换为该视图模型。我尝试过这种方式:

@Component({
  selector: 'app-tasklist-items-grid',
  templateUrl: './tasklist-items-grid.component.html',
  styleUrls: ['./tasklist-items-grid.component.scss'],
  providers: [TasklistItemsService, BsModalService]
})
export class TasklistItemsGridComponent implements OnInit {

// .....

  TaskListItemViewModel = class {    
    id?: number;
    tasklistId: number;
    typeOfTask: number;
    statusId: number;
    created_at: Date;
    updated_at: Date;
    checked: Boolean;
    rowVersion: number;
  }

  convertToViewModel = (item: TaskListItemViewModel) => item;
}

但是,找不到TaskListItemViewModel类型。我还尝试将内部类和方法都定义为静态,但仍然无法正常工作。

我想念什么?

3 个答案:

答案 0 :(得分:0)

您需要使用以下语法在TasklistItemsGridComponent之外定义类,但如果要创建嵌套类,则需要遵循链接中使用的解决方案: Any way to declare a nest class structure in typescript?

class TaskListItemViewModel { 
  id?: number;
  tasklistId: number;
  typeOfTask: number;
  statusId: number;
  created_at: Date;
  updated_at: Date;
  checked: Boolean;
  rowVersion: number;
  }

@Component({
  selector: 'app-tasklist-items-grid',
  templateUrl: './tasklist-items-grid.component.html',
  styleUrls: ['./tasklist-items-grid.component.scss'],
  providers: [TasklistItemsService, BsModalService]
  })
export class TasklistItemsGridComponent implements OnInit {
   convertToViewModel = (item: TaskListItemViewModel) => item;
}

答案 1 :(得分:0)

我认为您可以在组件外部声明模型的接口,而在组件内部只需创建实现该接口的嵌套类(即类表达式)即可。然后,您可以在类表达式中添加方法。

import { Component } from '@angular/core';

export interface MyInterface {
  id?: number;
  tasklistId: number;
  typeOfTask: number;
  // other properties
}
@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  {
  TaskListItemViewModel = class implements MyInterface {
    constructor(
      public id: number,
      public tasklistId: number,
      public typeOfTask: number
    ) {}
    // other methods which you want to implement
  }

  convertToViewModel = (item: MyInterface) => new this.TaskListItemViewModel(1, 2, 3);
}

当然,此示例显示-TypeScript的功能强大(在此示例中,我们看到的是Class expressions feature),但是我不会在实际项目中这样做,因为大多数流行的样式指南建议声明类/接口/枚举。 ...(又称模型)放在单独的文件中,通常为some-feature.model.ts。然后,我们可以在应用程序的其他部分(例如组件,指令等)中使用模型。

答案 2 :(得分:0)

根据您的要求,可以按以下方式使用它:

import matplotlib.pylab as plt
import scipy.sparse as sps
A = sps.rand(10,10, density=0.5)
M = sps.csr_matrix(A)
plt.spy(M)
plt.show()