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

Typescript 为什么我可以使用模块作为类?,typescript,types,Typescript,Types,我正在尝试开发一些类型。我想要实现的是能够使用这种语法导入这些类型 import {myModule} from "myModule"; 我成功了,但我不知道它为什么有效,它是如何工作的。我的意思是,这样做很完美,唯一的问题是我不理解它 以下是我在index.d.ts文件中的代码: namespace myModule { export interface myInterface { .... } export class myModule { ....

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

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;
它是有效的,(智能和类型检查工作正常),但我有一个问题:

我如何能够将myModule用作类名,然后用作名称空间

编辑:

好吧,看来我误解了声明的整个概念

从“myModule”导入{myModule}导入名为myModule的类

我能够访问myModule命名空间,因为它污染了一个作用域(如果
.d.ts
文件位于
tsconfig.ts
中,则可以从另一个文件访问
.d.ts
上的命名空间),甚至在我导入某些内容之前

谢谢@Ryan Cavanaugh的帮助

我如何能够将myModule用作类名,然后用作名称空间

名称空间、类型和值是三种不同的类型,您所指的名称空间永远不会模棱两可

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

let x: SomeNamespace.SomeType;
       ^^^^^^^^^^^^^
let x: SomeNamespace.SomeType;
                     ^^^^^^^^
let y: SomeType;
       ^^^^^^^^
类型始终出现在类型位置,可能出现在类型位置点的右侧:

let x: SomeNamespace.SomeType;
       ^^^^^^^^^^^^^
let x: SomeNamespace.SomeType;
                     ^^^^^^^^
let y: SomeType;
       ^^^^^^^^
值始终显示在表达式中:

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

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

为什么我可以创建类的实例?为什么语法不是像let myinstance=new myModule.myModule();??你问题中的例子非常不清楚。例如,
AirConsole
来自哪里?很好的捕获;)是的,我想写
myModule
。我试图尽可能简单地举个例子。当然应该是
myModule
。第一条评论中的问题仍然是实际的。可能是因为
行中的
引用了“myModule”
从“myModule”导入{myModule}
引用了一个名称空间,该行大括号中的
{myModule}
引用了该名称空间中的一个类
从“myModule”导入*为myModule
@RyanCavanaugh您能在您的回答中告诉我吗?您是否尝试过使用
import*
并了解它的工作原理?当我使用import*作为。。。我必须使用语法myModule.myModule()。
import*
import{}
之间的区别很容易找到: