首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在d.ts中进行再出口反应?

如何在d.ts中进行再出口反应?
EN

Stack Overflow用户
提问于 2022-07-16 03:57:17
回答 1查看 72关注 0票数 0

我正在开发一个像https://github.com/eclipse-theia/theia/blob/master/packages/plugin/src/theia.d.ts这样的插件系统。

我的@my-scope/plugin包提供类型定义。在加载插件时,插件上下文将像这样传递给插件启动函数:

代码语言:javascript
复制
// import React from 'react' // Should NOT import react in a plugin
import * as  from '@my-scope/plugin';

export function start(ctx: my.PluginContext) {
    // Dialog and Button component should have correct 
    const { Dialog, Button } = ctx.ui; types

    ctx.registerDialog('dialog1', () => {
      // onCustomEvent should be auto-suggested
      return <Dialog onCustomEvent={...}><Button onClick={...}>OK</Button></Dialog>;
    });

}

(为了使JSX工作,我可以将jsxFactory设置为ctx.React.createElement in tsconfig.json作为解决办法。)

在iframe或web worker中,插件不是孤立的,而是与它的主机共享全局(因为遗留的原因)。该插件还需要使用库创建React组件。因此,我必须在插件上下文中公开React和UI库,因为应用程序中应该只有一个React,所有插件都共享公共UI库(以及其他库,如axios)。

我的问题是如何在插件上下文定义中重新导出React和UI库,以便插件能够访问正确的类型并在JSX中具有自动建议。

代码语言:javascript
复制
export module "@my-scope/plugin" {
  export interface PluginContext {
    React: ??? // how to re-export React types here
    ui: ???; // how to re-export UI library types here
    registerDialog(dialogName: string, () => JSX.Element);
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-17 01:50:44

幸运的是,当我浏览@rollup/plugin-typescript源代码时,我发现以下代码解决了我的问题:

代码语言:javascript
复制
typescript?: typeof import('typescript');

在我的情况下

代码语言:javascript
复制
export module "@my-scope/plugin" {
  export interface PluginContext {
    React: typeof import('react');
    ui: typeof import('some-ui-lib');
    registerDialog(dialogName: string, () => JSX.Element);
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73001404

复制
相关文章

相似问题

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