For AI agents: the complete documentation index is available at /tc39-atlas/llms.txt, the full documentation bundle is available at /tc39-atlas/llms-full.txt, and this page is available as Markdown at /tc39-atlas/proposals/proposal-from-import.md.
  • 简体中文
  • from ... import ?

    提案概览
    提案速览

    该提案解决了当前 importfrom 顺序下的代码补全困难,提议使用相反的语法 from . import . 以便更好地补全模块说明符。提案还讨论了无绑定导入和与模块属性的交互等边缘情况,并提出了关于语法扩展和 ASI 相关问题的担忧。

    Note

    以下 README 来自上游仓库,其中的阶段或状态标注可能滞后;当前信息以提案概览为准。

    from ... import ...;

    提案发起人: Bradley Farias (@bmeck)

    阶段: 0

    对于当前的 importfrom 的顺序,代码补全很痛苦。 本提案旨在添加相反的写法来使代码补全工作。

    from "foo" import {bar};

    解释

    现状

    import /*在此处代码补全*/

    可能是模块说明符的字符串,或导入绑定的列表。

    • 工具无法在没有说明符的情况下静态确定可能的绑定列表,但说明符尚未添加到代码中。
    • 工具可以通过插入说明符来生成良好的补全,但这样做意味着程序员需要重新定位光标以插入绑定名称,这是导入的常见情况。
    import "foo"/*代码补全/程序员输入后将光标移动到这里*/
       // ^ 绑定名称的代码补全光标需要在这里

    提议

    from /*在此处代码补全*/

    模块说明符是此处唯一可能的内容,以实现更好的代码补全。

    无绑定的导入

    import "a";

    只是为了记录,我们可以添加带 from 前缀的形式,尽管它更冗长:

    from "a" import;

    与其他提案的合作

    模块属性

    模块属性的位置仍将在末尾。

    from "./foo.json" import foo with type="json"

    顾虑

    • 我们将在不添加任何新语义的情况下扩展语法。
    • 我们需要在此形式的导入中设置不同的 [no LineTerminator here] 规则。
    // 当前允许
    import
    	* as foo
    from
            'foo';

    由于 from 需要是上下文关键字,它需要避免与 ASI 相关的问题,并且语法将类似于:

    from [no LineTerminator here] ModuleSpecifier import ImportClause?