为什么我可以将模块用作类?

时间:2017-01-24 20:30:38

标签: typescript types

我正在尝试开发一些类型。我想要实现的是能够使用这种语法导入这些类型。

import {myModule} from "myModule";

我成功了,但我不知道为什么它的运作方式如何。我的意思是完美的,它以这种方式工作,唯一的问题是我不理解它。

以下是我在 index.d.ts 文件中的代码:

namespace myModule {
    export interface myInterface {
    ....
    }

 export class myModule {
    ....
  }
}

declare module "myModule" {
  export = myModule;
}

最重要的是我可以这样使用它:

import {myModule} from "myModule";
let myModuleInstanceVariable = new myModule();
let anotherVariable: myModule.myInterface;

它有效,(Intelisense和类型检查工作正常)但我有一个问题:

我是如何能够将myModule一次用作类名,然后作为名称空间使用?

修改

好吧我似乎误解了声明的整个概念。

import {myModule} from "myModule";导入一个名为myModule

的类

我能够访问myModule命名空间,因为它污染了一个范围(如果.d.ts.d.ts之前tsconfig.ts),我可以从另一个文件访问__HAL_RCC_FSMC_CLK_ENABLE(); int FSMC_Bank = 0; FSMC_Bank1->BTCR[FSMC_Bank+1] = FSMC_BTR1_ADDSET_1 | FSMC_BTR1_DATAST_1; // Bank1 NOR/SRAM control register configuration FSMC_Bank1->BTCR[FSMC_Bank] = FSMC_BCR1_MWID_0 | FSMC_BCR1_WREN | FSMC_BCR1_MBKEN; 文件上的命名空间进口的东西。

感谢@Ryan Cavanaugh的帮助。

1 个答案:

答案 0 :(得分:4)

  

我是如何能够将myModule一次用作类名,然后作为名称空间使用?

命名空间,类型和值是三种不同的东西,它们从不模糊,你指的是什么。

命名空间始终显示在类型位置的点的左侧:

let x: SomeNamespace.SomeType;
       ^^^^^^^^^^^^^

类型始终出现在类型位置,可能位于类型位置中点的右侧:

let x: SomeNamespace.SomeType;
                     ^^^^^^^^
let y: SomeType;
       ^^^^^^^^

值始终出现在表达式中:

let z = SomeValue;
        ^^^^^^^^^

因此,在引用名称空间,类型和值的同一标识符中没有冲突。您指的是哪一个总是由上下文明确地确定。