2016-09-28 2 views
1

Ich versuche, einen TypeScript-Dekorator zu schreiben, der die zugewiesene Klasse ändern kann. Nach vielen Experimenten kam ich zu the conclusion it is not yet possible, so ging ich einen anderen Weg eine einfache Funktion der Verwendung:Ändern des Klassentyps mit einem TypeScript-Klassen-Decorator

function component<P, T extends { props: P }, C extends { new(): T }>(cls: C) { 
    return cls as C & P; 
} 

const Comp = component(class { 
    props = { 
    myOptionalString: undefined as string | undefined, 
    myNumber: 5 as number, 
    }; 

    static render(elem: typeof Comp) { 
    const num: number = elem.myNumber; // LINE 87 
    } 
}); 

const empty: typeof Comp | undefined = undefined; 
const c = new Comp(); 
c.myOptionalString = 'hi'; // LINE 93 

jedoch auch dies nicht funktioniert:

ERROR in ./src/index.tsx 
(87,30): error TS2339: Property 'myNumber' does not exist on type 'typeof (Anonymous class) & {}'. 

ERROR in ./src/index.tsx 
(93,3): error TS2339: Property 'myOptionalString' does not exist on type '(Anonymous class)'. 

ich im Grunde bin versucht, um die Strecke zu gehen der Deklaration Zusammenführung über &, aber es funktioniert nicht so weit.

Gibt es eine Möglichkeit, eine Klasse wie diese zu mutieren?

Antwort

0

Stellen Sie sicher, dass dort const Comp: comp<{etc}> = comp (class, etc.)

steht
Verwandte Themen