0

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ますFrameworkConfiguration

someModuleそして、上記のようにのみ適用したいと思います。configure()これは、モジュールではないものに対して誤ってメソッドを実行したくないためです。

私のAPIはあり、消費者が(単に任意のクラス)get(key: Newable<T> | T): Promise<T>として何でもスローできるようにします。keyNewable<T>

@estus on__esModuleに感謝します。これは相互運用のためだけのものであるため、このコンテキストでは役に立たないことに気付きました。

4

1 に答える 1

0

モジュール名前空間オブジェクトを他のオブジェクトと実際に区別するものは何もなく、誰でもそのようなオブジェクトを作成できます。テストできます

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、しかしそれはあなたのトランスパイラーに依存します。

于 2016-11-08T21:39:18.207 に答える