【问题标题】:TypeScript / JavaScript - import all typesTypeScript / JavaScript - 导入所有类型
【发布时间】:2016-07-17 12:45:24
【问题描述】:

如何从某个文件导入所有类型?

假设我有myClass.tsotherClass.ts。 我想从otherClass.ts 导入所有类。

我见过很少的导入语法。

import ClassA, { ClassB, ClassC } from 'otherClass';

import * as foo from 'otherClass';

import foo = require('otherClass');

import 'rxjs/Rx';
  1. 第一个需要我列出所有内容。我想导入所有类型。

  2. 第二种语法需要命名空间前缀:foo.ClassA

  3. 我知道最后一个是 TypeScript 1.4,但仍然支持。

有没有类似下面的东西?

import * from "otherClass";
...
   var x = new ClassA()

另外,{ ... } 的含义是什么?有些类型在外面,有些在里面?

documentation 没有任何暗示。

【问题讨论】:

    标签: javascript typescript import ecmascript-6


    【解决方案1】:

    使用 ES6 模块,最接近您想要的东西是命名空间导入:

    import * as foo from './otherClass';
    

    将其单独导出为

    foo.ClassA
    

    您可以在import documentation 中查看可用的导入类型。

    另外,{ ... } 的含义是什么?有些类型在外面,有些在里面?

    这是用于导入命名导出。您可以在我引用的文档或my answer here 中阅读相关内容。

    【讨论】:

    • 但这不适用于类型或接口,是吗?我会对处理这些的等效方式非常感兴趣。
    • @DanielM 是的。您只需要确保从正在导入的文件中导出类型和接口即可。
    • 太棒了,谢谢!不需要更深入的研究,只是我的测试太简单了——我输入的是“foo”。在茫茫荒野中,期待 VS Code 向我推荐类型;然后尝试显式输入“foo.SomeType”,当然,我得到了一个错误。如果放置得当,它就像一个魅力:)
    • 你好,有没有办法导入所有没有别名的接口。例如像这样;从'./index'导入*
    • @DavidSherret 是否有像在 CSharp/VB .NET 中那样导入命名空间的概念,我没有拼写 Foo.Method() 只是 Method() 或引用通过 import * as Page1Models from './Page1Models/ 导入的枚举在正确的上下文中如此冗长是相当令人讨厌的。
    【解决方案2】:

    您可以使用三斜杠导入:

    /// <reference path="./actionsCollection.ts" />
    

    它们必须位于文件的第一行。

    1. When do I need a triple slash reference?
    2. https://www.typescriptlang.org/docs/handbook/triple-slash-directives.html

    【讨论】:

      猜你喜欢
      • 2019-08-11
      • 2020-06-22
      • 2017-12-03
      • 2020-12-14
      • 2019-06-25
      • 2016-10-21
      • 2016-11-15
      • 2016-03-12
      • 2019-01-22
      相关资源
      最近更新 更多