Создать экземпляр, используя интерфейс

В моем приложении Angular 2 TypeScript я определял интерфейс, а не класс, чтобы разрешать необязательные параметры.

Насколько я знаю, я должен где-то реализовать интерфейс следующим образом:

Класс экспорта myClass реализует myInterface {...}

а затем создать его с помощью new(...).

Я задавался вопросом, является ли это правильным способом (в Angular 2) или есть более простой/лучший способ?

Кроме того, где я должен поместить реализацию, в компонент (.ts), где я его использую, где находится интерфейс или где?

Ответ 1

Вы можете это сделать. Вы также можете просто создать объект, который реализует интерфейс, например:

interface foo {
    one: number;
    two: string;
}

const bar: foo = { one: 5, two: "hello" };

Если вы хотите использовать класс, вы можете поместить его туда, где хотите. Если он плотно связан с компонентом, вы можете поместить его туда. Вообще, хотя, я хочу, чтобы классы были слабо связаны, поэтому я помещал их в свой собственный файл.

Ответ 2

Я использую этот путь

interface IObject{
    first: number;
    second: string;
}

тогда

var myObject = {} as IObject
var myListObject = [] as Array<IObject>

Ответ 3

Вы можете сделать следующее:

export interface IMyInterface {
  property1: string;
  property2: number;
  property3: boolean;
}

export class MyClass implements IMyInterface {
  property1: string = '';
  property2: number = 1;
  property3: boolean = false;
  constructor(){}
}

Затем для создания экземпляра:

let newFromInterface = new MyClass();

Вот как я это делаю в своем коде, по крайней мере.

Ответ 4

interface IOffice {
id: number;
employeeName: string;
phone?: number;
}
export class OfficeComponent {
  officeData: IOffice= <IOffice>{};
  dummyOfficeData: IOffice = {id: 1, employeeName: 'ragnar', phone: 123};
  noPhoneOfficeData: IOffice = {id: 2, employeeName: 'floki'};

constructor(){
  console.log(this.dummyOfficeData);
  console.log(this.dummyOfficeData);
}
}

это лучший способ для меня. Вы можете экспортировать интерфейс из файла модели и импортировать в любые необходимые компоненты.