typescript - 了解 TypeScript 导入、模块和命名空间

标签 typescript import module namespaces

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

文件脚.ts

module Foo {
    export class Bar {
    }
}

文件 bar.ts
import { Bar } from "Foo";

Cannot find module 'Foo'.


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

File '/scripts/foo.ts' is not a module.



那么,我在这里误解了什么?另外,我应该使用 modulenamespace ,和有什么区别?

备注 foo.tsbar.ts都在同一个位置...我可以省略 ../scripts/ ?

最佳答案

您缺少的是 TypeScript 支持两种类型的模块 - externalinternal .内部模块在较新版本中被重命名为命名空间(这就是旧的 module 和较新的 namespace 关键字的原因——你可以在你的项目中随意使用它们/它们是平等的)。

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

但是 foo.ts 不是外部模块,除非您添加 export进入根范围。

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


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直到您想将类包装到命名空间中。

关于typescript - 了解 TypeScript 导入、模块和命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41764039/

相关文章:

android - 对不同的模块使用不同的 Git 仓库

javascript - TypeScript "import { myVar }"语法似乎在 Node/CommonJS/ES5 应用程序中编译不正确

javascript - 单元测试 ECMAScript 模块 (ESM) 和模拟本地状态?

typescript - 使用 typescript 定义通过 webpack 构建 js 库

file - 如何将现有的 Java.class 文件导入 Android Studio 项目

不同命名空间中的 Perl 导入包

MySQL 比较现有记录

javascript - 如何使用 'require' 导入命名空间?

从 http.get() 加载的 JSON 数据在我的 Angular 2 模板中未定义

interface - 从混合接口(interface)类型创建类