gpt4 book ai didi

javascript - 如何创建一个已经存在于窗口上的类

转载 作者:行者123 更新时间:2023-11-30 08:27:52 24 4
gpt4 key购买 nike

我想创建一个名为 Text 的类,但出现错误。

Duplicate identifier 'Text'

class Text extends MyOtherClass {
// Do stuff
}

这已经是存在于 Window 上的 JavaScript 类。我相信我可以将它添加到另一个对象,但我不知道这是否是最佳做法。

我有哪些选项可以使用 TextObject 或窗口上已定义的任何其他项目?

我在想也许我可以使用 namespace,但我不确定它是否有效,或者它是否按照我想要的方式工作。我在浏览器中运行最终代码,它不支持模块,所以我不想做我认为命名空间做的模块路径。

namespace MyNamespace {
class Text extends MyOtherClass {
// Do stuff
}
}

当我尝试这样调用它时:

myFunction(MyNamespace.Text);

我收到这个错误:

Property 'Text' does not exist on type 'typeof MyNamespace'

最佳答案

如果您打算创建一个类 Text并在不接触全局的情况下使用它 Text ,答案取决于您是将代码拆分成小模块(也就是我强烈推荐的“外部模块”),还是所有代码都在同一个文件中(“内部模块”或 namespace s)。

外部模块

假设您定义类 TextfileA.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类型本身,除非有充分的理由,否则您不应该这样做,您可以将新的属性/方法添加到 Text通过

declare global {
interface Text {
// New stuff goes here
}
}

参见 here更多细节。这需要 TypeScript 1.8 及更高版本。

关于javascript - 如何创建一个已经存在于窗口上的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42446941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com