导入语句和路径之间的打字稿差异

Typescript differences between import statements and paths

我有一个 class 想导入到某个地方 ("example.ts"):

export class Example {
  constructor() {
  }

  public someFunction() { }
}

谁能告诉我这三个来自 typescript 的 import 语句之间的区别?

  1. import * as example from "./example.ts"
  2. import { example } from "./example.ts"import { example } as example from "./example.ts"
  3. import "./example.ts"

路径名也有区别:

  1. "./example.ts"
  2. "example.ts"
  3. "example"

具体什么时候我必须使用哪条路径?

假设 example.ts 看起来像这样:

export const PI = 3.14
export function sayHello() { console.log('hi'); }
export default function() { console.log('i am default'); }
  1. import * as example from "./example" - 这会获取从 example.ts 导出的所有内容,并使其在 example 变量下可用。因此你会写成 example.sayHello()example.PI 之类的东西。您可能想知道默认导出在哪里。这个在 default 键下,因此您可以使用 example.default()
  2. 访问它
  3. import { PI, sayHello } from "./example" 这样您就可以只从 example.ts 导入特定的部分。在这个例子中只有 PI 变量和 sayHello 函数。可以直接调用:sayHello()
  4. import "./example" - 这基本上用于执行文件。例如,当有一些副作用时。例如在 rxjs 中我们使用 import 'rxjs/add/operator/map' 修改 rxjs observable 原型并添加 map 运算符。出口并不重要——执行很重要。这在 nodejs 环境中尤其重要,因为它会被转译为 require('./example').

我将在这里稍微修改一下您的示例:

  1. "./example" - 指同一目录中的文件。您通常会用它来导入您的模块。
  2. "example"指的是所谓的非相关模块。这些是相对于 tsconfig.json 中的 baseUrl 或使用路径映射解决的。通常路径映射会映射到您的 node_modules,因此您可以导入您的库。因此,您通常会使用它来导入外部模块。
  3. "example.ts" - 在打字稿中,导入文件名不允许以 .ts 结尾。因此只需使用 4. 或 5.

这里是reference in TS documentation.