哪些列出的导入语句是相同的?

Which of the listed import statements are identical?

我在 node 中确定了以下导入语句。下面的所有语句是否使用不同的命名空间范围导入 mathgraph,或者哪些导入样式相同?

const/var/let mathgraph = require('mathgraph');

import * as mathgraph from 'mathgraph';
import mathgraph from 'mathgraph';
import { mathgraph } from 'mathgraph';
import mathgraph = require('mathgraph');
// mathgrab lib
export default { foo: 'foo' }

// your code
import mathgraph from 'mathgraph';
mathgrab.foo

这会导入 默认 导出。


// mathgrab lib
export const someObject = { foo: 'foo' }

// your code
import { someObject } from 'mathgraph';
someObject.foo

这会导入一个 named 导出。


// mathgrab lib
export const someObject = { foo: 'foo' }
export default { bar: 'bar' }

// your code
import mathgraph, { someObject } from 'mathgraph';
mathgrab.someObject.foo
mathgrab.default.bar

您甚至可以将这两者结合起来,在一行中导入两种导出。


// mathgrab lib
export const someObject = { foo: 'foo' }
export default { bar: 'bar' }

// your code
import * as mathgraph from 'mathgraph';
mathgrab.someObject.foo
mathgrab.default.bar

这会将 所有 导出为单个对象。 default 导出将在此对象的 default 属性 上。


const mathgraph = require('mathgraph');

这仅适用于节点,并且在功能上与 import * 相同,但它是动态运行时要求,而不是编译时导入。这意味着打字稿不能使用导入文件的类型。 require 只是 一个函数,因此它 returns 是一个 any 类型的值,因此会丢失所有键入信息。

不要将 require 与 typescript 一起使用,你总是想使用 import 来代替。


import mathgraph = require('mathgraph');

最后,这是无效的语法。所以不要那样做。