Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何创建接受插件的节点项目_Node.js_Typescript - Fatal编程技术网

Node.js 如何创建接受插件的节点项目

Node.js 如何创建接受插件的节点项目,node.js,typescript,Node.js,Typescript,我有一个react项目,让我们称之为我的应用程序。我希望其他人能够为我的应用程序创建插件。我有一个typescript接口,插件应该导出一个实现它的类。我不知道的是如何编写项目之间的依赖关系 插件项目似乎应该依赖于我的应用程序,因为它需要导入接口。但是我的应用程序应该依赖于插件,这样它就可以调用实现类。这很糟糕,因为它需要手动从插件导入类,并在我的应用程序代码中调用插件类的构造函数。而且,这是一种周期性依赖 在package.json中编写依赖项以实现此插件体系结构的正确方法是什么?您对尝试执行

我有一个react项目,让我们称之为我的应用程序。我希望其他人能够为我的应用程序创建插件。我有一个typescript接口,插件应该导出一个实现它的类。我不知道的是如何编写项目之间的依赖关系

插件项目似乎应该依赖于我的应用程序,因为它需要导入接口。但是我的应用程序应该依赖于插件,这样它就可以调用实现类。这很糟糕,因为它需要手动从插件导入类,并在我的应用程序代码中调用插件类的构造函数。而且,这是一种周期性依赖


在package.json中编写依赖项以实现此插件体系结构的正确方法是什么?

您对尝试执行的操作的描述非常详细。关于周期性依赖性,这个很容易修复。只需在单独的项目(没有依赖项)中发布界面,并在应用程序和插件中引用它。请参阅下面的更多信息

关于如何实例化插件,请记住,无论如何,应用程序必须调用构造函数(或工厂方法)来实例化插件对象。这没问题

下面是一个示例:查看
ExpressJS
库。还有
cors
插件。在应用程序中编写它们的方式如下:

import express from "express"
import cors from "cors";

const app = express(); // here's your express app
app.use(cors()); // here you have instantiated the cors plugin and given it to your express app to use. 

关于TypeScript接口的一句话 请记住,TypeScript提供的是结构类型,而不是标称类型,您可能会熟悉Java和C等静态类型语言。TypeScript的结构类型为您提供了在两个模块之间强制执行“类型安全”的灵活性,而无需引用公共接口定义

这是一个很长的路要说,你可以完全没有一个共享的接口定义之间的应用程序和你的插件。只要插件返回与应用程序期望的接口结构匹配的对象(或者返回TypeScript可以“推断”与应用程序期望的接口匹配的对象),就足够了。无需像在Java或C中那样“继承”基类或“实现”接口。阅读有关TypeScript类型检查的更多信息:

  • 类型兼容性:

  • 类型推断:


我的接口有很多方法,因此有一个实际的接口可以实现,这样编写插件就容易多了;是的,在这种情况下,创建接口定义。您将有几种不同的方法来引用它。您可以将其发布为npm软件包,然后在应用程序和插件上安装它。或者,您可以使用mono repo模式和TypeScript的
复合
功能获取本地依赖性;或者简单地将interface.ts文件复制到两个项目中(如果在某处进行更改,则必须手动更新所有副本)。