2016-06-13 10 views
4

Ich versuche, die Stiftung Reveal-Plugin in meinem Typoskript-Code zu verwenden Art und Weise in der folgenden (aus Gründen der Lesbarkeit geändert):Nur Leere Funktion kann mit dem „neuen“ Stichwort genannt wird

var popup = new Foundation.Reveal($('#element')); 

und ich bin immer Folgefehler beim Übersetzen (am Ende kompiliert und funktioniert sowieso):

Wie soll ich es dann schreiben?

Typescript Playground - code illustrating the problem

+0

Ich glaube, du Dinge sind in Unordnung. Warum sollten Sie ein neues tun, wenn Reveal eine Funktion ist, die ein Objekt zurückgibt? – iberbeu

+0

Es ist der einzige Weg, wie ich es bisher geschafft habe ... – Wiktor

+2

Basierend auf dem Code in Spielplatz sollten Sie tun: 'var popup = Foundation.Reveal ($ ('# Element'))' (das heißt, ohne die 'neue ') –

Antwort

3

auf der Schnittstelle Basierend:

interface FoundationSitesStatic { 
    Reveal(element:Object, options?:IRevealOptions): Reveal; 
} 

man kann es nicht mit dem new Operator aufrufen (verwendet, um einen Konstruktor aufzurufen).

So beheben:

var popup = Foundation.Reveal($('#element')); 
+4

Yup, es kompiliert, aber es funktioniert nicht :) Deshalb habe ich diese Frage gestellt;) – Wiktor

+0

Was * funktioniert * aber nicht kompilieren? – basarat

+1

Ich denke, es ist gültig, JavaScript, aber in TypeScript ungültig. Und das verwirrt mich auch, wie @Wiktor, weil sie sagen, dass TypeScript eine Obermenge von JavaScript ist. Aber jetzt scheint es, dass es tatsächlich nicht ist. –

0

ich einen Weg finden, die Mitschrift Compiler zum Schweigen zu bringen, aber das wird die Typprüfung (tun Sie es mit Ihrer Vorsicht) aufgeben.

var popup = new (Foundation.Reveal as any)($('#element')); 

Weiteres Beispiel:

function User2(name) { 
    if (this instanceof User2) { 
     this.name = name; 
    } 
    else { 
     return new (User2 as any)(name); 
    } 
} 
Verwandte Themen