Angular 2模型:接口与类

时间:2017-05-05 15:47:22

标签: angular typescript

我有一个登录/注册模块,我想为他们写一个模型。

我会使用接口,但我需要有一个预定义的值。

我想知道 - 我应该将预定义的输出作为常量(它不会被更改,改变)并使用接口。或者将其写为类(当前)

目前,我写了两个单独的类 - registration.model.ts,login.model.ts,我可以抽象只使用一个模型吗? (例如:user.model.ts)

一些例子:

export class LoginUser {
  constructor(
    private email,
    private password,

    // I need to have it, backend expects it to be sent
    private connection = 'Username-Password-Authentication'  
  ) { }
} 


export class RegistrateUser {
  constructor(
    public name: string,
    public lastName: string,
    public email: string,
    public password: string,

    // I need to have it, backend expects it to be sent
    private connection = 'Username-Password-Authentication'
  ) { }
}

2 个答案:

答案 0 :(得分:3)

刚刚遇到了你的问题&正在调查同样的事情。

参考Angular 2 Style docs here,'指南'是在没有一个类可以的前提下实现接口:

  • 充当接口(如果使用implements关键字而不是extends关键字)
  • 小于class-implement-interface

根据经验:

Angular Guidelines> Typescript Guidelines(在Angular 2项目中)。

希望这会帮助你! :)

答案 1 :(得分:1)

我肯定会使用接口。这是一种简单的方法,遵循TypeScript建议使用JSON。

有问题的财产,

private connection = 'Username-Password-Authentication';

可以由执行请求的服务添加。

这也会减少代码重复,因为您可以使用通用函数或服务来创建此请求对象。

例如:

export default function withRequiredAuthProps<T>(model: T) {
  return {...model, connection: 'Username-Password-Authentication'};
}

然后,将模型发送回服务的Http服务可以使用类型约束来验证在发出请求之前是否已添加该属性

例如:

export default class MyHttpClient {
  post<T extends {connection: 'Username-Password-Authentication'}>(url: string, body: T) {
    //...
  }
}

这些只是作为示例,但它们基于最小的代码,并且有效。