TypeScript - 不使用构造函数扩展类定义

3
我正在使用一种不是用TypeScript编写的库,因此我必须使用定义文件。
在该定义文件中,有一个没有构造函数的类(因为原始JS代码没有构造函数)。如果我尝试在我的代码中扩展该类,则会出现错误:
错误:(36,2)TS2377:派生类的构造函数必须包含'super'调用。
如果我将super()添加到构造函数中,JavaScript会抱怨:
未捕获的类型错误:_super.call不是函数
我该如何修改定义文件以使此代码起作用并消除来自TS的第一个错误? (适用于TypeScript 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个回答

2

Backbone.events不是一个类(在.d.ts文件中不应该声明为类)。你不能扩展不是类的东西。


好的,那么应该如何声明呢?ModelBaseRouter仍然需要以某种方式继承Events中的方法... - Stefan Profanter
遇到了同样的问题...不知道在TS中是否有什么方法可以解决这个_super.call(this);语句,当我们真的不想调用它时...或者我们应该修复Backbone.d.ts文件来解决这个问题:( - Frédéric Camblor

0

有些人可能会出现以下错误:

_super.call不是一个函数

如果他们错误地定义了类,就会出现这种情况。

export class InlineIf extends React{... }

而不是

export class InlineIf extends React.Component {... }

把这作为一个答案添加,希望将来有人会发现它有用...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接