我正在编写一些代码,我只想从import * as name from 'module-name'
语法应用于令牌。
有办法吗?我记得有一个__ESModule
旗帜或类似的东西,但这不在官方规范中,所以我不确定这是否是正确的方法(我找不到确切的文章谈论它,一个参考会有很大帮助。)
即。这就是我想要的(在示例中使用TypeScript):
import * as someModule from 'module-name'
import someDefault from 'module-name'
import { someNamed } from 'module-name'
import otherImport = require('cjs-module')
let somethingElse = {} // anything
checkIsStarModule(someModule) // true
checkIsStarModule(someDefault) // false
checkIsStarModule(someNamed) // false
checkIsStarModule(otherImport) // false
checkIsStarModule(somethingElse) // false
描述import * as name ...
语法的正确名称是什么? :)
编辑:在问题中添加一些上下文。
我正在做类似于aurelia
的{{1}}。
我想将其仅应用于FrameworkConfiguration
,如上所述。这是因为我不想在不是模块的事物上意外地执行someModule
方法。
我的API为configure()
,我允许消费者投放任何内容get(key: Newable<T> | T): Promise<T>
(key
只是任何类)。
感谢@estus Newable<T>
,我意识到它只适用于互操作,因此在这种情况下无用。
答案 0 :(得分:0)
没有什么能真正区分module namespace objects与其他人,任何人都可以创建这样的对象。你可以测试
function isModuleNamespaceLike(o) {
return o === Object(o)
&& o[Symbol.toStringTag] === "Module"
&& Object.getPrototypeOf(o) === null
&& !Object.isExtensible(o)
&& Object.getOwnPropertyNames(o).every(function(p) {
var d = Object.getOwnPropertyDescriptor(o, p);
return d.enumerable && !d.configurable;
});
}
或尝试寻找__esModule
,但这取决于您的转录程序。