2015-10-16 5 views
3

Я использую библиотеку, которая не написана в TypeScript, и поэтому я должен использовать файл определения.typescript - расширение определения класса без конструктора

Внутри этого файла определения есть класс без конструктора (поскольку исходный JS-код не имеет конструктора). Если я пытаюсь расширить класс в моем коде, я получаю ошибку:

Error:(36, 2) TS2377: Constructors for derived classes must contain a 'super' call.

Если добавить super() конструктору, JavaScript сетует:

Uncaught TypeError: _super.call is not a function

Как я могу изменить файл определения так, чтобы этот код работает, и первая ошибка из TS устранена? (Для машинописи 1.6)


Вот простой пример файла определения (на основе backbone-global.d.ts:

declare module Backbone { 
    class Events { 
     on(eventName: string, callback?: Function, context?: any): any; 
     off(eventName?: string, callback?: Function, context?: any): any; 
    } 

    class ModelBase extends Events { 
    ... 
    } 

    class Router extends Events { 
    ... 
    } 
} 

В моем коде у меня есть что-то вроде:

/// <reference path="libs/typescript/backbone/backbone.d.ts" /> 

class RosApiManager extends Backbone.Events { 

    constructor() { 
     super(); 
    } 
} 

ответ

2

Backbone.events не класс (и не должен был быть объявлен как таковой в файле .d.ts). Вы не можете расширять то, что не является классом.

+0

Итак, как же тогда это было объявлено? 'ModelBase' и' Router' по-прежнему необходимо каким-то образом наследовать методы из 'Events' ... – SailAvid

+0

Попадать в ту же проблему ... интересно, есть ли что-то в TS, позволяющее обходить эту команду' _super.call (this); ' когда мы действительно не хотим его называть ... или мы должны исправить файл Backbone.d.ts для этого :( –