我在理解如何使用相同的命名空间制作两个文件并在Typescript中将一个文件导入另一个文件时遇到了问题。
情况就是这样:
file1.ts
export namespace nspace {
export class ClassA {
}
}
file2.ts
import {nspace} from './file1';
export namespace nspace {
export class ClassB extends nspace.ClassA {
private z: nspace.ClassA;
}
}
在file2中我有这些错误:
1)合并声明'nspace'中的个别声明必须全部导出或全部导出
2)属性'ClassA'在'typeof nspace'
类型上不存在最重要的是,当用于声明z
字段的类型时,可以正确找到ClassA(如果我在IDE中使用“转到声明”,它甚至会将我带到正确的文件中)
我已经尝试在互联网上搜索第一个错误,因为我真的不明白这意味着什么,但我找不到的页面都没有帮助。我在稿件中阅读了有关声明合并的文档,但我找不到类似于我的情况
我不知道这是否有任何帮助,但我在我的应用程序中使用SystemJS
答案 0 :(得分:2)
使用起来应该简单得多:
ClassA.tsnamespace MyApp {
export class ClassA {
public a: string = "classA";
}
}
ClassB.ts
namespace MyApp {
export class ClassB extends ClassA {
private class_a: ClassA = new ClassA();
private b: string = "classB";
}
}
main.ts
namespace MyApp {
var b = new ClassB();
console.log(b.class_a.a) // "classA"
}
编译器将识别出您在同一名称空间中工作,因此不需要import
它,甚至不需要它前缀。
/// <reference path="ClassA.ts" />
虽然在我的设置中,我没有必要这样做,编译器似乎自动正确选择。 (我在tsconfig.json中使用了一个OutFile和exclude指令)
边注:我觉得奇怪的是你被迫导出ClassA
以便在我的ClassB.ts中发现它。如果我想在Main.ts中使用它们(即使在私有变量中),似乎不可能将ClassA和ClassB保持为命名空间。它只是错误的&#34;找不到名字......&#34;
答案 1 :(得分:1)
显然,在导入工作时给出另一个名称:
文件1
export namespace nspace {
export class ClassA {
}
}
file2的
import * as a from './file1';
export namespace nspace {
export class ClassB extends a.nspace.ClassA {
private b: a.nspace.ClassA;
}
}