首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为包装类添加TypeScript定义

为包装类添加TypeScript定义
EN

Stack Overflow用户
提问于 2017-06-08 21:59:56
回答 1查看 110关注 0票数 1

我正在使用一个名为react-server的包,它可以接受任何类,并将在运行时向其添加方法。它希望它包装的类具有如下所示的接口

代码语言:javascript
复制
interface {
    getElements(): Array<React.Component>
}

并且它将向类添加方法,比如getRequest(),它也可以从类内部引用。

想象一下这样的页面类:

代码语言:javascript
复制
class SimplePage {
  getElements() {
    // Right now, this wouldn't compile, because this.getRequest() is
    // not an available method.
    const request: Request = this.getRequest();
    // ...
  }
}

考虑到this.getRequest()在编译时实际上并不存在,而且react-server实际上没有提供我可以从定义文件中引用的任何真正的类或接口,那么我是否可以创建一个定义,让我可以使用这个定义来调用某些东西实际上是一种Page类型,并且它可以使用这些方法呢?

理想情况下,我希望能够在定义文件(.d.ts)中提供这些信息,这样我就可以在任何使用react-server的应用程序中引用它们。我也很乐意这样做,而不是每次我想要引用这个方法时都被迫将this转换到其他东西上。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-08 22:13:57

你有两个我能想到的选择。

考虑到以下接口:

代码语言:javascript
复制
interface ExtendedPage {
    getRequest(): Request;
}

(1) 这个参数

代码语言:javascript
复制
class SimplePage {
    getElements(this: SimplePage & ExtendedPage) {
        const request: Request = this.getRequest();
        // ...
    }
}

(2)使用暂存属性(就像混音器)实现接口:

代码语言:javascript
复制
class SimplePage implements ExtendedPage {
    getElements() {
        const request: Request = this.getRequest();
        // ...
    }

    getRequest: () => Request;
}

编辑

您可以声明一个类并扩展它:

代码语言:javascript
复制
declare class ExtendedPage {
    getRequest(): Request;
}

class SimplePage extends ExtendedPage {
    ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44446242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档