相关疑难解决方法(0)

ES6 + javascript模块导出选项

我已经看到ES6模块的公共出口有以下两种方式:

// method 1
export var getAnswer = function () { return 'forty two'; };

// method 2
export default function () { return 'forty two'; };
Run Code Online (Sandbox Code Playgroud)
  1. 这两个都有效吗?
  2. 如果是这样,为什么它们都存在?
  3. 是否有其他有效的模块导出选项使用ES6语法?

我很惊讶我用googlefu找不到答案.我关心ES6模块,不是 CommonJS,RequireJS,AMD,Node等.

javascript syntax module export ecmascript-6

80
推荐指数
2
解决办法
3万
查看次数

是否可以在打字稿中输出*作为foo

我可以:

import * as foo from './foo'
Run Code Online (Sandbox Code Playgroud)

但似乎无法出口相同:

export * as foo from './foo'
Run Code Online (Sandbox Code Playgroud)

这似乎也不起作用......:

import * as fooImport from './foo';
export const foo = fooImport;
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

---更新---

你想要实现什么目标?

基本上,我正在ngrx/store为我的应用程序实现后端.我想组织我的代码:

app/core/
  index.ts
  viewer/
    index.ts
    viewer-actions.ts
    viewer-reducer.ts
  view-data/
    index.ts
    view-data-actions.ts
    view-data-reducer.ts
Run Code Online (Sandbox Code Playgroud)

我想用我的index.ts文件链接每个子集的所有导出(常见范例).

但是,我想保留命名空间.我的每个xxx-reducer.tsxxx-actions.ts文件具有相同的名称(出口reducer,ActionTypes,Actions,...),所以正常的链接会导致名称冲突.我所试图做的是让所有从出口xxx-actionsxxx-reducer再出口xxx.这将允许我:

import { viewer, viewerData } from './core';

...
    private viewer: Observable<viewer.Viewer>;
    private viewData: Observable<viewData.ViewData>; …
Run Code Online (Sandbox Code Playgroud)

module export typescript

24
推荐指数
2
解决办法
9272
查看次数

是否可以在ES2015中导出"import*as"的结果?

在ES2015中,可以将整个模块导入为其属性为模块导出的对象:

import * as name from 'module';
Run Code Online (Sandbox Code Playgroud)

我发现这对于命名空间非常有用,并且一直使用它.

也可以重新导出其他模块的导出:

export { name } from 'module'; // selectively
export * from 'other-module'; // indiscriminately
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试用这种风格编写一个带有命名空间的库.在顶级模块中收集所有内容的直观方式如下:

export * as name from 'module';
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用; Babel和Rollup都拒绝了它.

可以将模块作为对象导入,通过迭代其键来创建克隆,然后导出它,但它只是一个普通的旧动态对象,所以我将失去Rollup提供的巨大优势.

那么,使用声明性模块语法真的没办法做到这一点吗?在我看来,没有任何借口.

javascript ecmascript-6 es6-module-loader

9
推荐指数
1
解决办法
2586
查看次数

是否有通配符导出的语法?

有导入语法:

import * as foo from 'bar';
Run Code Online (Sandbox Code Playgroud)

我同样尝试过:

export * as foo from 'bar';
Run Code Online (Sandbox Code Playgroud)

但这引发了错误:

ERROR in src/app/@theme/components/aComp/aComp.loader.ts(1,10): error TS1005: 'from' expected.
src/app/@theme/components/aComp/aComp.loader.ts(1,13): error TS1005: ';' expected.
src/app/@theme/components/aComp/aComp.loader.ts(1,17): error TS1005: ';' expected.
src/app/@theme/components/aComp/aComp.loader.ts(1,22): error TS1005: ';' expected.
Run Code Online (Sandbox Code Playgroud)

还有导出语法:

export { default as foo } from 'bar';
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点而*不是default


(仅供参考,我试图require从声明中删除):

export const foo = require('bar');
Run Code Online (Sandbox Code Playgroud)

ng serve运行时抛出以下错误,包括.ts上述内容:

ERROR in src/app/@theme/components/aComp/aComp.loader.ts(6,20): error TS2304: Cannot find name 'require'.
Run Code Online (Sandbox Code Playgroud)

javascript syntax typescript ecmascript-6 angular

2
推荐指数
1
解决办法
1604
查看次数