我有一个位于名称空间的库,有点像这样:
namespace MyLib {
export class MyClass {}
}
然后我有另一个不在命名空间中的类,如下所示:
class Test extends MyLib.MyClass {}
我是否可以在不必为命名空间添加前缀的情况下访问MyClass
?也许是这样的:
import MyLib;
class Test extends MyClass {}
我发现我可以这样做:
import MyClass = MyLib.MyClass;
哪个没关系,但基于这个我还是要导入名称空间中的所有类?
答案 0 :(得分:0)
命名空间约定是一种doesn't translate very well to JavaScript的C#形式。我的建议是完全停止使用它,因为它会比解决实际问题引起更多的头痛。
相反,您应该将模块本身视为名称空间“事物”。您可以这样做:
// MyLib.ts
class MyClassA {}
class MyClassB {}
export {
MyClassA,
MyClassB,
};
// Your code
import { MyClassA, MyClassB } from "./MyLib.ts";
或在单独的文件中
// MyClassA.ts
export class MyClassA {}
// MyClassB.ts
export class MyClassB {}
// MyLib.ts
import MyClassA from "./MyClassA";
import MyClassB from "./MyClassB";
export {
MyClassA,
MyClassB,
};
// Your code
import { MyClassA, MyClassB } from "./MyLib.ts";
但是,您不能“导入所有名称”,而不能像在C#中那样用魔法来限制事物的范围。需要以某种方式声明它们。在您的示例代码上,没有办法说出Test
来自MyLib
-实际上,即使您可以使它起作用(通过全局变量,例如window.Test = Test
),TypeScript也不会对此感到很高兴,因为它找不到Test
的定义,您需要在某处declare var
对其进行定义。