【发布时间】:2019-08-12 14:54:27
【问题描述】:
我注意到React 可以这样导入:
import * as React from 'react';
...或者像这样:
import React from 'react';
第一个导入 react 模块中的所有内容(参见:Import an entire module's contents)
第二个只导入default 模块导出(参见:Importing defaults)
这两种方法似乎是不同的,并且从根本上不兼容。
为什么它们都有效?
请参考源代码并解释机制...我有兴趣了解它是如何工作的。
更新
这不是与What is the difference between import * as react from 'react' vs import react from 'react' 的副本
这个问题是用一般的 ES6 模块信息回答的。
我在询问使react 模块像这样工作的机制。它似乎与“hacky”导出机制in the source here 相关,但尚不清楚如何同时导入 整个 模块和 default 导出到 React 和让这两种方法都适用于转译 JSX 等。
【问题讨论】:
-
你问
Why do they both work?我问你Why wouldn't they work? -
如果只导入默认值和所有内容,给您相同的结果,您认为“所有内容”意味着什么?您是否查看过您要导入的来源?
-
import * as React from 'react';包括default,我想。 -
在打字稿中,您可以在
tsconfig.json到allowSyntheticDefaultImports中指定。这就是让您import React from 'react'的原因。 Javascript/babel 在这里“作弊”,让您在实际不存在时进行合成默认导入。React导出方式的正确语法应该是import * as React from 'react' -
@KevinB 我查看了源代码,似乎与this "hacky" line 有关,但我不清楚它是如何工作的
标签: javascript reactjs typescript react-native ecmascript-6