【问题标题】:TypeScript import * without creating aliasesTypeScript 导入 * 不创建别名
【发布时间】:2015-10-15 23:49:18
【问题描述】:

在 TypeScript 中,如何在不创建任何别名的情况下从文件中“导入 *”?

例如我有一个带有顶级导出函数的文件“utils”,并且希望在不为每个函数重新创建别名的情况下导入所有这些函数。

类似这样的:

import * from "utils";

这可能吗?

【问题讨论】:

    标签: import typescript


    【解决方案1】:

    您无法生成自动名称,您必须为其指定一个本地文件名称。这是为了给每个文件自己的命名上下文而设计的。

    // import the default export (something exported with "export default")
    import Stuff from "./Stuff";
    
    // import specific things only; aliases in this style are optional
    import { ItemA as AliasA, ItemB as AliasB } from "./Stuff";
    import { ItemA, ItemB } from "./Stuff";
    
    // import everything at once, grouped under a common name
    import * as Stuff from "./Stuff";
    

    我...想要导入所有这些而不为每个函数重新创建别名。

    听起来你想要上面的第三个选项。

    但是使用这种语法会创建一个别名

    我认为这个想法是,如果您可以在导入所有内容的同时采用定义的名称,那么您就会遇到命名冲突。这样做的方式是,您必须为每个导入选择一个名称,由您选择的名称来避免冲突,而不是让导入相互冲突。

    我认为您可以做类似的事情,但只能使用 .d.ts 文件。 jquery.d.ts 做到了,但我不是 100% 确定它是如何工作的。你可以简单地说:

    // where the file is really Stuff.d.ts
    import "./Stuff";
    

    【讨论】:

      【解决方案2】:

      你已经接近它了:

      import * as utils from 'utils';
      

      没有花括号。

      【讨论】:

      • 但是使用这种语法创建了一个别名“utils”,我最初的问题是没有创建别名。例如,您有一个具有实用功能的外部文件,并且您希望将它们全部导入全局命名空间中,并且不重复它们的名称,如 import { name } from "file"
      • 啊,好的。不,不能用模块语法来做到这一点。您可以使用像 _.extend(global, utils); 这样的函数来扩展全局命名空间,但是您仍然需要声明这些函数以便 TypeScript 理解:/
      【解决方案3】:

      我认为这个想法是创建一个“Utils”模块,将所有函数和/或类附加到它,将 export 放在它们前面,然后将其导出,例如

      module Utils {
          export function add(first:number, second:number):number {
              return first+second
          }
      }
      export = Utils
      

      虽然我还没有在 typescript 中使用过 es6 模块语法,但你似乎暗示要使用它。

      【讨论】:

        猜你喜欢
        • 2016-11-30
        • 2022-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-29
        • 2021-04-09
        • 1970-01-01
        • 2020-10-22
        相关资源
        最近更新 更多