【问题标题】:How do I extend a global interface locally in TypeScript?如何在 TypeScript 中本地扩展全局接口?
【发布时间】:2020-10-16 20:41:27
【问题描述】:

我正在尝试理解this GitHub post,它描述了在本地扩展全局接口。

但是,由于帖子中的评论很少,我很难理解发生了什么。以下是我所指的帖子。

您可以在本地扩展全局接口

declare global {
    interface String {
        myMegaMethod(): void;
    }
}    
'hey'.myMegaMethod(); // works

如果我要使用以下模式来扩展像 String 这样的原生类型的功能,我会怎么做?

我是否只有一个名为 string.ts 的文件,其中包含我希望我的字符串可以访问 myMegaMethod 时导入的以下 sn-p?

declare global {
    interface String {
        myMegaMethod(): void;
    }
}

【问题讨论】:

  • 您需要修改String.prototype 以使该方法实际可用。全局接口只是为了让 TS 知道这个方法存在,它不会为你创建方法。

标签: typescript


【解决方案1】:

我很难理解发生了什么。

提到的示例代码只是展示了如何使用该方法,并没有谈论完整的implementation 及其usage,该代码还用于type declaration aka d.ts 其他模块的文件使用它是实现您提到的目标的步骤之一。

实际上,要扩展“string”,您甚至可能不需要global declare,只需在新的d.ts 文件中使用一个简单的接口即可,您可以在下面附加的 SO 链接中参考。

如果我要使用以下模式来扩展 像 String 这样的原生类型,我该怎么做呢?

首先,只需在 .ts 文件 wont 中添加该代码即可。您需要遵循一些步骤来实现这一点,主要使用prototype

这在下面的 SO 线程中有完整的描述 -

How to extend String Prototype and use it next, in Typescript?

【讨论】:

    猜你喜欢
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 2016-07-06
    • 2016-05-06
    • 1970-01-01
    • 2020-05-15
    • 2020-10-30
    相关资源
    最近更新 更多