JavaScript中的':'冒号在import语句中有什么作用?

17

给出以下示例。

import { QueryClientContract, TransactionClientContract } from '@ioc:Adonis/Lucid/Database'

使用冒号一直让我感到困惑,不明白导入的文件可以从哪里引用。


6
这不是 JavaScript 的一部分,而是与你使用的“打包器”模块有关。JavaScript 只是说 from 值必须是一个字符串常量;它对字符串内容的语义没有任何规定。 - Pointy
你有没有想过哪个打包工具可以翻译它?这对打包工具意味着什么? - myckhel
我对 adonis.js 不是很熟悉,但我猜测它与作用域包有关 https://docs.npmjs.com/about-scopes。一些工具可能已将这些包安装为作用域包,而 node(我假设是 node?)可以解析该包。 - pandamakes
我不认识那个,抱歉。你在哪里看到的? - Pointy
3个回答

1

模块前缀已经存在一段时间了,尽管直到最近它们并没有影响模块功能(您可以在这里阅读更多关于此开发的信息)。看起来这些模块上的特定前缀是由Adonis.js的安装过程提供的,鉴于该工具包使用自定义命令来构建项目的生产版本等事项,它可能有一些自定义流程,例如专门为生产构建加载依赖项的最小化版本。

目前还没有标准化的意义或效果来使用这样的前缀,除了node:(它限制导入核心包并防止您因拼写错误而意外下载恶意软件包)。一些项目将其用于内部目的,具体取决于特定项目前缀可能具有的影响或不影响。


0
在TypeScript中,冒号(:)用作类型注解语法,用于指定变量、参数或返回值的类型。然而,在您提供的上下文中,冒号(:)与类型注解没有特定的关联。它在AdonisJS框架中用于定义声明合并语法。
在AdonisJS中,声明`declare module '@ioc:Adonis/Core/Route'`用于扩展或增强已定义在`@ioc:Adonis/Core/Route`模块中的类型或接口。
例如,您可能有一个自定义路由宏,想要将其添加到现有的`Route`模块中。通过使用`declare module`语法,您可以将自定义方法或属性添加到`Route`模块中,使其在整个应用程序中可用。
以下是如何使用它的示例:
declare module '@ioc:Adonis/Core/Route' {
  interface RouteContract {
    myCustomMethod: () => void;
  }
}

在上面的代码中,我们声明了在@ioc:Adonis/Core/Route模块中的RouteContract接口应该包含一个名为myCustomMethod的新方法。
这种语法允许您扩展或修改AdonisJS或其他库提供的现有类型或接口,从而使您能够添加自己的自定义功能。
希望这样解释了AdonisJS声明合并语法中':'的用法。如果您还有任何问题,请告诉我!

-5

7
哎呀!也许这份参考文献仍然让我对它一无所知。 - myckhel

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