在 TypeScript 中,import typeimport 有以下区别:

  1. import type 仅仅引入类型信息,而不会引入实际的 JavaScript 对象。这意味着在编译后,import type 引入的代码不会出现在生成的 JavaScript 文件中。而 import 会引入实际的 JavaScript 对象。

  2. import type 只能用于导入类型声明,例如接口、类型别名、枚举等。而 import 可以用于导入值、函数、类等任何东西。

  3. 在使用 import type 时,无法使用导入的类型作为值进行实例化或传递给函数。这意味着,你无法使用 import type 导入的类型来创建一个对象或者传递给一个函数作为参数,因为这些类型只存在于编译时。

举个例子:

1
2
3
4
5
6
7
8
9
10
11
// foo.ts
export interface Foo {
bar: string;
}

// index.ts
import { Foo } from './foo'; // 这里导入了实际的 Foo 接口对象
import type { Foo as FooType } from './foo'; // 这里导入了 Foo 接口的类型信息

const foo: Foo = { bar: 'baz' }; // 正常使用 Foo 接口对象
const fooType: FooType = { bar: 'baz' }; // 无法使用 Foo 接口的类型信息创建一个对象,这里会报错

因此,当你只需要类型信息时,应该使用 import type。这样可以避免引入多余的代码,并提高编译性能。而当你需要实际的 JavaScript 对象时,则需要使用 import