最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Enumerating wildcard imports in ES2015 - Stack Overflow

programmeradmin1浏览0评论

So, in ES2015 you can have:

// Module A
export const FOO = 0;
export const BAR = 1;

// Module B
import * as AExports from 'ModuleA';
console.log(AExports.FOO); // Prints 0

What's the official way to enumerate the exports of ModuleA at runtime?

import * as AExports from 'ModuleA';
// Are these values guaranteed to be something?
Object.keys(AExports); // If so, should I look at enumerable values?
[...AExports]; // Iterable values?
Object.getOwnPropertyNames(AExports); // Here?

As far as I can tell, the spec describes this as an ImportedBinding but I can't deduce anything more from that.

NameSpaceImport : * as ImportedBinding
Let localName be the StringValue of ImportedBinding.
Let entry be the Record {[[ModuleRequest]]: module, [[ImportName]]: "*", [[LocalName]]: localName }.
Return a new List containing entry.

So, in ES2015 you can have:

// Module A
export const FOO = 0;
export const BAR = 1;

// Module B
import * as AExports from 'ModuleA';
console.log(AExports.FOO); // Prints 0

What's the official way to enumerate the exports of ModuleA at runtime?

import * as AExports from 'ModuleA';
// Are these values guaranteed to be something?
Object.keys(AExports); // If so, should I look at enumerable values?
[...AExports]; // Iterable values?
Object.getOwnPropertyNames(AExports); // Here?

As far as I can tell, the spec describes this as an ImportedBinding but I can't deduce anything more from that.

NameSpaceImport : * as ImportedBinding
Let localName be the StringValue of ImportedBinding.
Let entry be the Record {[[ModuleRequest]]: module, [[ImportName]]: "*", [[LocalName]]: localName }.
Return a new List containing entry.
Share Improve this question asked Jul 30, 2016 at 22:56 intentionally-left-nilintentionally-left-nil 8,3468 gold badges40 silver badges62 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 10

The important part of the spec in this case is that when you do

import * as foo from 'foo';

The foo variable's value is created at section 15.2.1.16.4 step 12.b which creates a Module Namespace Exotic Object, where properties are the named exports and all properties are enumerable so you are totally safe in using Object.keys(foo) to get the names of all of the named exports. The object is not iterable, so you will not be able to use an iterable spread, though you could use the proposed object spread syntax to copy the properties if you wanted. Object.getOwnPropertyNames should work fine too.

发布评论

评论列表(0)

  1. 暂无评论