2016-04-20 19 views
7

Nella mia applicazione Angular 2-Typescript ho definito un'interfaccia anziché una classe per consentire parametri opzionali.Qual è il modo corretto di istanziare un'interfaccia in Typescript all'interno di un'applicazione Angular 2?

Per quanto ne so che dovrei in qualche implementare l'interfaccia per

classe esportazione myClass implementa MyInterface {...}

e un'istanza tramite nuovo (...)

Mi chiedevo se questo è il modo giusto per farlo (in Angular 2) o c'è un modo più semplice/migliore ?

Inoltre, dove dovrei inserire l'implementazione, nel componente (.ts) dove lo uso, dove è l'interfaccia o dove?

risposta

15

Puoi farlo in questo modo. È anche possibile creare un oggetto che implementa l'interfaccia simile:

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

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

Se si desidera utilizzare una classe, si può mettere dove si vuole. Se è strettamente accoppiato con il componente, puoi metterlo lì. In generale, però, voglio che le classi siano accoppiate liberamente, così le ho inserite nel loro file.

+3

Penso che sia piuttosto: 'const bar: foo = {uno: 5, due:" ciao "};' ;-) ma ottima risposta! –

+0

Oops, hai ragione. Lo aggiusterò. – rgvassar

+0

Un altro modo è: interfaccia foo { uno ?: numero; due ?: stringa; const bar: foo = {} –

5

Io uso questo modo

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

poi

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

Grazie, questa è una buona soluzione per quando voglio istanziare la variabile con un'interfaccia, ma non si conoscono tutti i campi in quel momento. È molto più pulito da implementare anche per interfacce più estese. – Wiggitamoo

0

È possibile effettuare le seguenti operazioni:

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

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

Poi istanziare:

let newFromInterface = new MyClass(); 

Questo è come lo faccio nel mio codice almeno.

Problemi correlati