2017-09-04 5 views
1

Ich versuche, diesen Code zu verwenden:Singleton Dekorateur in Typoskript

function singleton<T extends { new() }>(constructor: T): T { 
    return new constructor() 
} 

@singleton 
export default class SomeClass { 
    constructor() {} 

    public method(): string { 
     return 'Hello!' 
    } 
} 

console.log(SomeClass.method()) 

Und es funktioniert. Die Nachricht "Hallo!" wird in der Konsole angezeigt. Aber der Typskript-Compiler sagt, es gibt einen Fehler: enter image description here

Was ist los?

+1

Wahrscheinlich erwartet der Compiler nicht, dass ein Dekorator den Typ einer 'Klasse' in die eines Objekts ändert. Und er ist dort in guter Gesellschaft - das solltest du nicht tun. Um Singletons zu schreiben, benutze 'const SomeClass = {public method(): string { gib 'Hallo!' } }; 'und damit fertig sein! – Bergi

Antwort

1

Leider kann der Compiler nicht wissen, was der Dekorator an der Klasse ändert. Sie könnten versuchen, etwas wie folgt: