【问题标题】:typescript - extend class definition without constructortypescript - 在没有构造函数的情况下扩展类定义
【发布时间】:2019-08-30 17:32:11
【问题描述】:

我使用的库不是用 TypeScript 编写的,因此我必须使用定义文件。

在这个定义文件中有一个没有构造函数的类(因为原始的 JS 代码没有构造函数)。如果我尝试在我的代码中扩展类,我会收到错误:

错误:(36, 2) TS2377: 派生类的构造函数必须包含 '超级'调用。

如果我在构造函数中添加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();
    }
}

【问题讨论】:

    标签: javascript backbone.js typescript


    【解决方案1】:

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

    【讨论】:

    • 好的,那么它应该如何声明呢? ModelBaseRouter 仍然需要以某种方式从 Events 继承方法...
    • 遇到同样的问题...想知道当我们真的不想调用它时,TS 中是否有允许解决此 _super.call(this); 语句的东西...或者我们应该修复 Backbone.d .ts 文件:(
    【解决方案2】:

    有些可能是错误:

    _super.call 不是函数

    如果他们错误地定义了类

    export class InlineIf extends React{... }
    

    而不是

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

    将此添加为答案,希望将来有人会发现它有用...

    【讨论】:

      猜你喜欢
      • 2020-01-29
      • 1970-01-01
      • 2017-09-18
      • 2019-08-05
      • 2012-08-17
      • 2021-04-29
      • 2017-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多