2016-06-13 2 views
4

Я пытаюсь использовать плагин Reveal Фонда в моей машинописи кода следующим образом (изменено для удобства чтения):Только пустота функция может быть вызвана с «новым» ключевым словом

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

, и я получаю следующее сообщение об ошибке во время компиляции (в конце концов, он компилируется и работает в любом случае):

TS2350: Only a void function can be called with the 'new' keyword. 

Как я должен написать это тогда?

Typescript Playground - code illustrating the problem

+0

Я думаю, что вы Мессинг вещи. Почему вы хотите сделать новое, если Reveal - это функция, которая возвращает объект? – iberbeu

+0

Это единственный способ, с помощью которого я работал до сих пор ... – Wiktor

+2

На основе кода на игровой площадке вы должны: 'var popup = Foundation.Reveal ($ ('# element'))' (то есть без 'new ') –

ответ

3

на основе интерфейса:

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

вы не можете назвать его с new оператором (используется для вызова конструктора).

Так исправить:

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

Yup, он компилируется, но он не работает :) Вот почему я задал этот вопрос;) – Wiktor

+0

Что * работает *, но не компилируется? – basarat

+1

Я думаю, что это действительно JavaScript, но недействительный в TypeScript. И это меня тоже смущает, как @Wiktor, потому что они говорят, что TypeScript - это надмножество JavaScript. Но теперь кажется, что на самом деле этого нет. –

0

я найти способ закрыть машинописи компилятор, но это будет отказаться от проверки типа (Делайте это с осторожностью).

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

Еще пример:

function User2(name) { 
    if (this instanceof User2) { 
     this.name = name; 
    } 
    else { 
     return new (User2 as any)(name); 
    } 
} 
Смежные вопросы