我想创建一个名为Text
的类,但是我收到了错误。
重复的标识符'文字'
class Text extends MyOtherClass {
// Do stuff
}
这已经是Window
上存在的JavaScript类。我相信我可以将它添加到另一个对象,但我不知道这是否是最好的做法。
我有哪些选项,以便我可以使用Text
或Object
或窗口中已定义的任何其他项目?
我想也许我可以使用namespace
,但我不确定这是否有效,或者它是否按照我想要的方式工作。我在浏览器中运行最终代码,它不支持模块,所以我不想做一个我认为命名空间的模块路径。
namespace MyNamespace {
class Text extends MyOtherClass {
// Do stuff
}
}
当我试图这样称呼它时:
myFunction(MyNamespace.Text);
我收到此错误:
财产'文字' mynamespace'
的类型'类型不存在
答案 0 :(得分:3)
如果您打算创建一个类Text
并在不触及全局Text
的情况下使用它,答案取决于您是否将代码拆分为小模块(又称“外部模块”)我强烈建议)或者您的所有代码是否都在同一个文件中(“内部模块”或namespace
)。
假设您在Text
中定义了课程fileA.ts
:
export class Text {
// class implementation goes here
}
// Other classes, variables etc
然后在您的消费文件fileB.ts
中(为简单起见,假设位于同一文件夹中),import
Text
类
import {Text} from './fileA'
// Use Text normally
var a = new Text();
在fileB.ts
中,Text
将是用户定义的,而不是全局Text
。
在同一档案fileA.ts
中:
namespace SomeName {
export class Text {
// Implementation
}
}
var a = new SomeName.Text();
如果另一方面你要修改全局Text
类型本身,除非有充分理由你不应该这样做,你可以通过
declare global {
interface Text {
// New stuff goes here
}
}
有关详细信息,请参阅here。这需要TypeScript 1.8及更高版本。
答案 1 :(得分:1)
如果要创建具有相同名称的类,可以使用命名空间。但是你必须将它称为namespace.class。它会工作。您不能在同一名称空间中多次创建同一个类。
答案 2 :(得分:1)
要在其父命名空间声明之外使用命名空间类型,必须从命名空间export
编辑。如果未导出,则不在其父namespace
声明之外可用。如果您使用相同的命名空间,则适用甚至。
以下是一个例子:
namespace Example {
class Search {
searchKey = document.getElementById('');
}
export class OtherSearch {
}
type Primary = '123';
export type Secondary = '123';
}
Example.OtherSearch; // No Error
Example.Search; // Compile Error
namespace Example {
class SecondSearch {
// Compile error: Example.Primary is not visible even though its the same namespace.
alpha() : Example.Primary {
}
beta(): Example.Secondary {
return null;
}
}
}