2017-05-23 3 views
-1

Ich versuche, ein Objekt in Typoskript zu erstellen. Ich will das so allgemein tun, dass sie es StandardTypescript Create Generisches Objekt

interface IModal { 
    content: string; 
    count: number 
} 

Normalerweise basieren weg von seiner Art automatisch bekommen würde ich eine Instanz davon wie so erklärt:

var modal: IModal = { 
    content: '', 
    count: 0 
}; 

Ich will nicht muss das immer tun. Ich möchte, dies zu tun, so dass die automatisch eine Instanz der Schnittstelle mit typisierten Standard dh

erstellen
number = 0, 
string = '', 
boolean = false, 
MyCustom = new MyCustom 

ich so etwas wie dies tun will:

export class MakeObject { 

    Make<T> : T = function(iInterface) => { 
     return default(T); 
    }  
} 

Aber ich glaube nicht, dass Wille arbeiten

+0

Warum die down vote? –

Antwort

3

Schnittstellen können extends Klassen, so können Sie es so machen:

class DefaultModel { 
    content = '' 
    count = 0 
} 

export interface IModel extends DefaultModel {} 
/* since interface generates no code, 
* you can also export the default instance using the same name, if you like 
*/ 
export const IModel: IModel = new DefaultModel 
// or export the default class, if you're more interested in it 
export const IModel = DefaultModel 

eine andere Art und Weise, es zu tun, wenn Sie nicht gegen Klassen, abstract Klassen verwendet, in Maschinenschrift sind sie so flexibel wie Schnittstellen (zB: austauschbar mit type) und existieren zur Laufzeit:

abstract class BaseModel { 
    content = '' 
    count = 0 
} 

const modal = new (class extends BaseModel {}) 

Beachten Sie, dass mit diesem Ansatz content und count sind nicht abstract, so, während Sie noch Basemodel für typecheck verwenden können, wenn Sie Subklassen zwingen müssen, ihre eigenen Werte zu schaffen, können Sie immer noch eine Schnittstelle erstellen den Standard zu löschen:

class SomeModel extends BaseModel {} // OK  

interface IModel extends BaseModel {} 

class SomeModel implements IModel {} // NOT OK: Property 'content' is missing 
3

ich dies tun wollen, so dass die automatisch eine Instanz der Schnittstelle mit typisierten Standard dh

erstellen

Sie können dies nicht magisch tun, da Schnittstellen zur Laufzeit nicht existieren. Das heißt Sie Code schreiben, kann dies ganz einfach zu tun:

interface Model { 
    content: string; 
    count: number 
} 

function createModel({ 
    // Add defaults 
    content = '', 
    count = 0 
} = {}): Model { 
    return { content, count } 
} 

createModel(); // Okay 
createModel({ count: 1 }); // Okay 
createModel({ counted: 1 }); // Error: Typo 
+0

Hat Typoskript eine Reflektion, möchte ich nicht für jedes von mir erstellte Modell eine Definition schreiben müssen –

Verwandte Themen