【问题标题】:Typescript differences between import statements and paths导入语句和路径之间的打字稿差异
【发布时间】:2018-04-26 03:50:48
【问题描述】:
我想在某处导入一个类(“example.ts”):
export class Example {
constructor() {
}
public someFunction() { }
}
谁能告诉我这三个 import 语句 from typescript 的区别?
import * as example from "./example.ts"
-
import { example } from "./example.ts" 或 import { example } as example from "./example.ts"
import "./example.ts"
路径名也有区别:
"./example.ts"
"example.ts"
"example"
我究竟什么时候必须使用哪个路径?
【问题讨论】:
标签:
typescript
typescript2.0
【解决方案1】:
假设example.ts 看起来像这样:
export const PI = 3.14
export function sayHello() { console.log('hi'); }
export default function() { console.log('i am default'); }
-
import * as example from "./example" - 这会获取从 example.ts 导出的所有内容,并使其在 example 变量下可用。因此,您将编写 example.sayHello() 或 example.PI 之类的内容。您可能想知道默认导出在哪里。这个在default 键下,因此您可以使用example.default() 访问它
-
import { PI, sayHello } from "./example" 这样您只从example.ts 导入特定部分。在这个例子中只有 PI 变量和 sayHello 函数。可以直接调用:sayHello()
-
import "./example" - 这基本上用于执行文件。例如,当有一些副作用时。例如在 rxjs 中我们使用import 'rxjs/add/operator/map' 来修改 rxjs 的 observable 原型并添加 map 操作符。出口并不重要——执行很重要。这在 nodejs 环境中尤其重要,它会被转换为 require('./example')。
我会在这里稍微修改你的例子:
-
"./example" - 指同一目录中的文件。您通常会使用它来导入您的模块。
-
"example" 指的是所谓的非相对模块。这些是相对于您的tsconfig.json 中的baseUrl 或使用路径映射来解决的。通常路径映射映射到您的node_modules,因此您可以导入您的库。因此,您通常会使用它来导入外部模块。
-
"example.ts" - 在打字稿中,导入文件名不允许以 .ts 结尾。因此只需使用 4. 或 5.
这里是reference in TS documentation。