2017-07-18 3 views
2

Was wäre der richtige Weg, einen Klassen-Dekorator zu schreiben, der nur bestimmte Klassen akzeptiert?Wie geben Sie einen Klassendekorator in Typoskript ein?

Ich habe versucht, die folgenden:

class Component { 
    age: number; 
} 

function registerComponent(name: string) { 
    return <T extends Component>(constructor: T): T => { 
    return constructor as T; 
    } 
} 

@registerComponent("demo") 
class C1 extends Component { 

} 

was zur Folge hat:

Argument of type 'typeof C1' is not assignable to parameter of type 'Component'. 
    Property 'age' is missing in type 'typeof C1'. 

Try in TypeScript Repl

Antwort

2

Was ist mit dem Dekorateur übergeben wird, ist die Art, keine Instanz des Typs. constructor: T sagen, bedeutet constructor muss eine Instanz vom Typ T sein, so stattdessen haben Sie es zu sagen, dass der Parameter und das Ergebnis sind beide Konstrukteure für den Typ T:

class Component { 
    age: number; 
} 

function registerComponent(name: string) { 
    return <T extends Component>(constructor: new() => T): new() => T => { 
    return constructor; 
    } 
} 

@registerComponent("demo") 
class C1 extends Component { 

} 

und Sie würden einen zusätzlichen +1 für die Aufnahme erhalten das typescript repl, wenn ich könnte. Ich habe es sehr leicht gemacht, meine Antwort zu überprüfen.

Beachten Sie, dass Sie möglicherweise auch die Konstruktorparameter angeben möchten.

Verwandte Themen