我正在尝试开发一些类型。我想要实现的是能够使用这种语法导入这些类型。
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的帮助。
答案 0 :(得分:4)
我是如何能够将myModule一次用作类名,然后作为名称空间使用?
命名空间,类型和值是三种不同的东西,它们从不模糊,你指的是什么。
命名空间始终显示在类型位置的点的左侧:
let x: SomeNamespace.SomeType;
^^^^^^^^^^^^^
类型始终出现在类型位置,可能位于类型位置中点的右侧:
let x: SomeNamespace.SomeType;
^^^^^^^^
let y: SomeType;
^^^^^^^^
值始终出现在表达式中:
let z = SomeValue;
^^^^^^^^^
因此,在引用名称空间,类型和值的同一标识符中没有冲突。您指的是哪一个总是由上下文明确地确定。