gpt4 book ai didi

javascript - 重新导出模块不适用于对象传播

转载 作者:行者123 更新时间:2023-11-29 21:03:17 25 4
gpt4 key购买 nike

我有一个 index.js 文件,上面写着:

import aReducer from './ducks/a';
import bReducer from './ducks/b';
import * as aSelectors from './ducks/a';
import * as bSelectors from './ducks/b';

console.log(aReducer) //function i expect
console.log(aSelectors) //object with keys to selectors i expect

export { aReducer, bReducer, ...aSelectors, ...bSelectors };

如果我在这个文件中 console.log,我会看到 reducers 是我期望的函数,选择器别名是具有我期望的选择器键的对象。 reducers 是 duck 文件的默认导出,而 selectors 是从同一个文件导出的。

但是,当我尝试将此模块与另一个文件一起导入时,我只能导入两个 reducer。这两个选择器是未定义的。我认为解构会将每个键添加到我的导出对象中。我究竟做错了什么?

other_file1.js

import { aReducer, bReducer } from 'my-module'; //works!

other_file2.js

import { someSelectorThatWasInMyaSelectorsObject } from 'my-module'; //does NOT work!

最佳答案

您不能在 export {}; block 中使用 ...。它是一个明确的名称列表,就像 import {name} from 一样。它不是导出 key 的对象。例如和进口一样

import { foo as fooRenamed } from "";

export就是

export {
fooVar as foo,
};

export block 是要导出的变量的显式列表,带有可选的显式导出名称。不涉及任何对象。

具体来说,没有涉及对象,因为导出的名称在文件主体执行之前就已处理并已知,因此不仅不允许对象,而且不可能允许,因为对象需要执行才能存在。

要得到你想要的,你应该使用:

// Export the referenced files' default under two specific names.
export { default as aReducer } from './ducks/a';
export { default as bReducer } from './ducks/b';

// Re-export every named export from these two files.
export * from './ducks/a';
export * from './ducks/b';

关于javascript - 重新导出模块不适用于对象传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45447083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com