了解TypeScript导入,模块和命名空间

时间:2017-01-20 12:45:49

标签: typescript import module namespaces

我在尝试在TypeScript项目中导入类型时遇到问题。我不完全确定进口是如何运作的......

文件 foo.ts

module Foo {
    export class Bar {
    }
}

文件 bar.ts

import { Bar } from "Foo";
  

无法找到模块'Foo'。

import { Bar } from "../scripts/Foo";
  

文件'/scripts/foo.ts'不是模块。

那么,我在这里误解了什么?另外,我应该使用module还是namespace,有什么区别?

注意 foo.tsbar.ts位于同一位置...我可以省略../scripts/吗?

2 个答案:

答案 0 :(得分:1)

您缺少的是TypeScript支持两种类型的模块 - externalinternal。内部模块在较新版本中重命名为命名空间(这是因为有较早的module和较新的namespace关键字的原因 - 您可以在项目中使用它们/它们是相同的)。

bar.ts 中使用import语法时,您正尝试使用外部模块。

但是在将export添加到根范围之前, foo.ts 不是外部模块。

我建议留在import并使用这样的外部模块:

<强> Foo.ts

export class Bar {
}

<强> Bar.ts

import { Bar } from "./Foo"; // path needs to be relative here
// if referencing files are in same folder use ./ to force the path to be relative

在您希望将类包装到名称空间之前,无需使用module / namespace

答案 1 :(得分:0)

您应该阅读一些文档。一个快速的谷歌给了我this, which explains the different between namespace and module.看看它,并尝试更好地了解你需要什么,因为我不能完全告诉你的帖子,因为模块的语法似乎是{{1}根据我在那里看到的东西,似乎命名空间可能就是你想要的。我不完全确定,但我觉得你的答案就在那个页面上。