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{}
之间的区别很容易找到: