如何在打字稿中扩展 Array

2024-02-08

在帖子中“打字稿扩展字符串静态” https://stackoverflow.com/questions/17843215/typescript-extend-string-static,我得到了一些我们可以扩展打字稿现有基类的内容,例如添加新方法

interface StringConstructor {
   isNullOrEmpty(str:string):boolean;
}
String.isNullOrEmpty = (str:string) => !str;

它确实有效。但对于通用接口,我遇到了问题。例如,我需要在 Array.h 中添加新方法 contains() 。我使用以下代码:

   //1
    interface Array<T> {
        contain(item: T): boolean;
    }  
    //2
    ?????? = (item: T) => {
    // ....
        return true;
    };

步骤1之后,在VS intellisense中确实弹出包含方法,但是我在哪里可以实现方法?


由于接口中的定义已经绑定到通用约束,因此在实现中您可以将其视为任何:

interface Array<T> {
    contain(item: T): boolean;
}  

Array.prototype.contain = function(item) {
    return this.some(obj => item == obj);
};

另外,不要对原型方法使用箭头函数,原因如下:

interface Array<T> {
    fn(): void;
}

Array.prototype.fn = () => {
    console.log(this);
};

let a = [];
a.fn(); // Window

But:

Array.prototype.fn = function() {
    console.log(this);
};

let a = [];
a.fn(); // []

如果你的目标是es5或更低,那么编译器将箭头函数转换为常规函数并不重要,但如果您随后切换到目标es6(并且箭头功能将持续存在)那么您的代码将被破坏,而您将不明白为什么。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在打字稿中扩展 Array 的相关文章

随机推荐

  • Android 4.3 BTLE作为服务器:如何启动广告?

    我正在尝试使用 4 3 中的新 BTLE API 在 Nexus 7 上实现 BTLE 服务器 我遇到了几个问题 首先 SDK 中没有示例 唯一的例子是针对客户的 其次 文档实际上告诉你做错误的事情 它指出 人们必须使用BluetoothA
  • 如何检测 MemoryMappedFile 是否正在使用

    在 C 4 0 中 MemoryMappedFile有几种工厂方法 CreateFromFile CreateNew CreateOrOpen or OpenExisting 我需要打开MemoryMappedFile如果存在 则从文件创建
  • Gitlab docker 和 external_url

    你好 我使用 docker 安装了最新的 gitlab 我使用 p 10080 80 和 10022 22 启动容器 我可以浏览 gitlab 并执行我需要的操作 我什至可以分别使用端口 10080 和 10022 git 克隆 http
  • 如何在android webview中启用默认突出显示菜单?

    如何在 android webview 中启用默认文本突出显示菜单 例如 复制 粘贴 搜索 共享 在 Android 1 5 2 3 上工作 您可以使用emulateShiftHeld 自 2 2 起公开 但现在已弃用 此方法将您的 Web
  • 使用 'hd' 参数限制 Google OAuth 访问一个域 (Django / python-social-auth)

    我正在构建一个内部网络应用程序供我的公司使用 并希望使用我们的 Google Apps 域来管理来自我们公司域用户名的访问 本问题的其余部分为 example com 我在用着 Django 1 9 5 python social auth
  • 如何在日期字段上显示日期选择器日历

    这是关于如何使用 jQuerydate picker在 django 支持的站点中 models py is from django db import models class holidaytime models Model holid
  • 对数组使用限制?

    有没有办法告诉 C99 编译器我访问给定数组的唯一方法是使用 myarray index 说这样的话 int heavy calcualtions float restrict range1 float restrict range2 fl
  • 为 iPhone 本地化货币

    我希望我的 iPhone 应用程序允许用户使用适当的符号 等 输入 显示和存储货币金额 NSNumberFormatter 会做我需要的一切吗 当用户切换其区域设置并且这些金额 美元 日元等 存储为 NSDecimalNumbers 时会发
  • Java 中 HTML 字符编码的转换

    我们正在尝试下载网页源代码 但是由于字符编码的原因 我们无法正确看到某些特定字符 例如 我们尝试了以下代码来转换字符串 text 变量 的编码 byte xyz text getBytes text new String xyz windo
  • React:搜索和过滤功能存在问题

    我正在开发一个组件 它应该能够 按输入搜索 使用输入字段 在触发 onBlur 事件后将调用一个函数 之后onBlur事件开始寻找 方法将运行 按所选流派过滤 用户可以从其他组件中从流派列表中选择流派 之后onClick事件启动过滤器 方法
  • 使用 Facebook 图表来获取粉丝页面的粉丝?

    我有一个粉丝页面 位于http www facebook com shop4tronix http www facebook com shop4tronix 我可以通过以下方式访问此页面上的信息 http graph facebook co
  • 文本区域 onresize 不起作用

    根据w3schools
  • 返回主菜单不断循环菜单

    当程序第一次启动时 我可以成功地从主菜单中选择任何选项 但是 当我从任何子菜单中选择 返回主菜单 选项时 它都会返回主菜单 但无论我之后再次按哪个选项 它都会继续循环该菜单 只允许我选择返回主菜单选项 如何将选择重置到不会继续循环的位置 我
  • GDB源路径

    如何让gdb使用不同的目录来查找源文件 例如 我在编译期间的源文件位于目录中 home foo bar c 接下来 我将其移动到目录中 tmp debug home foo bar c 如何强制gdb在该目录中搜索 根据这个网站 https
  • 基于有序对多关系对描述符进行排序

    我的核心数据模型的描述 项目和问题实体 项目有一个有序的一对多关系至已命名问题的问题 问题与名为parentProject 的项目具有一对一的关系 这是我获取问题的代码 let fetchRequest NSFetchRequest ent
  • 如何编写混淆矩阵

    我用Python写了一个混淆矩阵计算代码 def conf mat prob arr input arr confusion matrix conf arr 0 0 0 0 for i in range len prob arr if in
  • 如果没有 firebug 断点,jquery ajax 将无法工作

    我使用以下方法来调用 php function validateEmaiAjax email val null warning load https localhost Continental 20Tourism register ajax
  • 如何在 Cordova 中从 CDVPlugin 显示 ViewController?

    我已经为此苦苦挣扎了几天 但无法让它发挥作用 也找不到其他人似乎已经解决了这个问题 希望有人可以提供帮助 我有一个简单的 ViewController 在 Swift 的故事板中有 2 个视图 我试图通过 Cordova 插件打开它 And
  • 是否可以在 TypeScript 中的元组上使用 Array.prototype.map(),同时保留返回类型中的元组长度?

    我希望如果我使用内置的map在 TypeScript 中对长度为 N 的元组执行函数 则返回类型也将是长度为 N 的元组 元素的类型可能不同 具体取决于传递给的函数 map 相反 返回类型只是回调函数返回的任何类型的标准可变长度数组 元组的
  • 如何在打字稿中扩展 Array

    在帖子中 打字稿扩展字符串静态 https stackoverflow com questions 17843215 typescript extend string static 我得到了一些我们可以扩展打字稿现有基类的内容 例如添加新方