使用TypeScript将导入导出为命名空间

Ale*_*lls 7 typescript typescript2.0 suman

我的问题与此问题几乎相同:https: //github.com/Microsoft/TypeScript/issues/4529

说我有这个:

//exported imports
export {ISumanOpts, IGlobalSumanObj} from 'suman-types/dts/global';
export {ITestCaseParam} from 'suman-types/dts/test-suite';
export {IHookParam} from 'suman-types/dts/test-suite';
export {IDescribeFn} from 'suman-types/dts/describe';
export {ItFn, ITestDataObj} from 'suman-types/dts/it';
export {IBeforeFn} from 'suman-types/dts/before';
export {IBeforeEachFn} from 'suman-types/dts/before-each';
export {IAfterFn} from 'suman-types/dts/after';
export {IAfterEachFn} from 'suman-types/dts/after-each';
export {DefineObjectContext as IDefObjCtx} from "./test-suite-helpers/define-options-classes";
export {DefineObjectTestCase as IDefObjTestCase} from "./test-suite-helpers/define-options-classes";
export {DefineObjectAllHook as IDefObjAllHook} from "./test-suite-helpers/define-options-classes";
export {DefineObjectEachHook as IDefObjEachHook} from "./test-suite-helpers/define-options-classes";


export namespace s {

  // ! I want to move all of the above exported items into a namespace here

}
Run Code Online (Sandbox Code Playgroud)

有没有办法使用namespacemodule导出作为命名空间的一部分而不是单独导出它们?

我有这个越来越近了:

在此输入图像描述

所以我尝试将它们更改为导入,然后将它们放在const上,如下所示:

在此输入图像描述

但是正如你所看到的,我的一些声明是接口,而不是类,在这种情况下看起来我得到错误消息"只引用一个类型,但在这里被用作值".

fat*_*thy 12

s.ts例如,创建一个文件名,您要在其中导出命名空间的所有内容:

export {ISumanOpts, IGlobalSumanObj} from 'suman-types/dts/global';
export {ITestCaseParam} from 'suman-types/dts/test-suite';
export {IHookParam} from 'suman-types/dts/test-suite';
export {IDescribeFn} from 'suman-types/dts/describe';
export {ItFn, ITestDataObj} from 'suman-types/dts/it';
export {IBeforeFn} from 'suman-types/dts/before';
export {IBeforeEachFn} from 'suman-types/dts/before-each';
export {IAfterFn} from 'suman-types/dts/after';
export {IAfterEachFn} from 'suman-types/dts/after-each';
export {DefineObjectContext as IDefObjCtx} from "./test-suite-helpers/define-options-classes";
export {DefineObjectTestCase as IDefObjTestCase} from "./test-suite-helpers/define-options-classes";
export {DefineObjectAllHook as IDefObjAllHook} from "./test-suite-helpers/define-options-classes";
export {DefineObjectEachHook as IDefObjEachHook} from "./test-suite-helpers/define-options-classes";
Run Code Online (Sandbox Code Playgroud)

然后在你的模块中你可以做到:

import * as s from './s'

export {s}
Run Code Online (Sandbox Code Playgroud)

它将在名为的命名空间中导出类型和值s.然后可以使用以下方法导入它们

import {s} from 'your-module'

const anObject: s.ISumanOpts = {...}
Run Code Online (Sandbox Code Playgroud)

  • 所有这些方法都是有缺陷的。它们基本上是“假的”命名空间,并且在没有向代码添加额外的解释性注释的情况下,不清楚代码的作用是组装命名空间。我们所寻求的是一种使用“namespace”关键字来实际定义这个组装的命名空间的方法。命名空间没有内在的“自己的”名称并且必须在本地分配的名称下导入的想法是完全愚蠢的。 (3认同)

Arn*_*ier 5

我所做的是这样的:

import * as Block from './block'
import * as FullNode from './full-node'
import * as ListOnChain from './list-on-chain'
import * as HashTools from './hash-tools'
import * as KeyValueStorage from './key-value-storage'
import * as SequenceStorage from './sequence-storage'
import * as SmartContract from './smart-contract'
import * as NodeBrowser from './node-browser'
import * as NetworkApi from './network-api'
import * as NetworkClientBrowserImpl from './network-client-browser-impl'
import * as NodeApi from './node-api'
import * as NodeImpl from './node-impl'
import * as NodeTransfer from './node-transfer'
import * as NodeNetworkClient from './node-network-client'
import * as WebsocketConnector from './websocket-connector'

export {
    Block,
    FullNode,
    ListOnChain,
    HashTools,
    KeyValueStorage,
    SequenceStorage,
    SmartContract,
    NodeBrowser,
    NetworkApi,
    NetworkClientBrowserImpl,
    NodeApi,
    NodeImpl,
    NodeTransfer,
    NodeNetworkClient,
    WebsocketConnector
}
Run Code Online (Sandbox Code Playgroud)

然后在另一个文件中,我可以像这样导入,并且所有文件都将保留在自己的空间中:

import * as AllComponents from 'blockchain-js-core'
Run Code Online (Sandbox Code Playgroud)

如果你想将它们一一导入,你可以这样做:

import {
    Block,
    FullNode,
    ListOnChain,
    HashTools,
    KeyValueStorage,
    SequenceStorage,
    SmartContract,
    NodeBrowser,
    NetworkApi,
    NetworkClientBrowserImpl,
    NodeApi,
    NodeImpl,
    NodeTransfer,
    NodeNetworkClient,
    WebsocketConnector
} from 'blockchain-js-core'
Run Code Online (Sandbox Code Playgroud)

可以在这里找到一个示例: https: //github.com/ltearno/blockchain-js/blob/master/blockchain-js-core/src/index.ts