导出时需要声明或声明

时间:2020-06-27 15:09:53

标签: reactjs typescript redux

我正在像这样从index.js导出所有的减速器:

export checking from 'reducers/Checking';
export saving from 'reducers/Saving';
export overdraft from 'reducers/Overdraft';
..........

当我尝试将Typescript集成到我的项目中时,在^上方的每一行上开始出现以下错误:

 Declaration or statement expected

我的预设中有stage-0支持这种语法,但仍然会出现错误。

tsconfig.json

有人可以指导我如何消除该错误吗?

{
  "compilerOptions": {
    "target": "es5",
    "lib": [
      "dom",
      "dom.iterable",
      "esnext"
    ],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "module": "es2015",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react"
  },
  "include": [
    "src"
  ]
}

2 个答案:

答案 0 :(得分:1)

export * from 'reducers/Checking';
export * from 'reducers/Saving';
export * from 'reducers/Overdraft';

您必须尝试这个。

答案 1 :(得分:0)

问题是您使用的导出形式不存在。您可以在规范here中找到表单的列表,但没有export x from "y"表单。

在我看来,您正在尝试将每个模块的默认导出重新导出为命名导出。也就是说,例如,您在export default ...中有reducers/Checking.ts,并希望将其从index.ts重新导出为checking。如果是这样,则必须显式使用命名形式和标识符default

// Re-exports the default export of each module
export { default as checking } from 'reducers/Checking';
export { default as saving } from 'reducers/Saving';
export { default as overdraft } from 'reducers/Overdraft';

但是,如果您在export const checking ...中命名了类似reducers/Checking.ts的出口,并且您尝试重新出口所有命名出口< / strong>,来自index.ts,您可以这样做:

// Re-exports all named exports from each module:
export * from 'reducers/Checking';
export * from 'reducers/Saving';
export * from 'reducers/Overdraft';

或者,如果您尝试仅导出名为export 的单个名称,则可以这样做:

// Re-exports a named export from each module:
export { checking } from 'reducers/Checking';
export { saving } from 'reducers/Saving';
export { overdraft } from 'reducers/Overdraft';

最后,如果您尝试为每个模块导出一个模块命名空间对象(该对象具有每个模块导出的属性),您可以这样操作:< / p>

// Re-exports a named export from each module:
export * as checking from 'reducers/Checking';
export * as saving from 'reducers/Saving';
export * as overdraft from 'reducers/Overdraft';

以上所有假设reducersnode_modules中。如果它是您自己的目录,则需要在这些模块说明符的开头(./而不是from './reducers/Checking'){}。


单独:要使用JavaScript模块语法(对于 E CMA S cript M 规则通常称为ESM),您需要告诉TypeScript这是什么你在做。有两种方法可以做到:

  1. 如果您拥有from 'reducers/Checking'或更高版本,TypeScript将假定您使用的是JavaScript模块(而不是CommonJS等)

  2. 您可以使用"target": "ES6"明确选择加入JavaScript模块。