typescript 扩展数组原型

2024-01-11

我只想使用一种方法来扩展 Array 原型,将字符串数组的每个项目转换为大写,这是我的第一种方法:

Array.prototype.toUppercase = () => {map(String.toUppercase);}

为什么不工作?

多谢!


需要先声明该成员才可以实现

interface Array<T> {
  toUpperCase(this: string[]): string[];
}

实现大致如下所示

if (typeof Array.prototype.toUpperCase !== 'function') {
  Array.prototype.toUpperCase = function () {
    return this.map(c => c.toUpperCase());
  };
}

请注意,对现有成员的检查有点草率。仅仅因为它是一个函数并不意味着它具有与我们原本放置在那里的相同的行为。通常应该避免增强内置原型,但有时它是有用的。切勿在库中执行此操作,并警告您的代码可能会在未来的某些环境中崩溃。

运行示例 https://fabiandev.io/typescript-playground/#JTdCJTIyZWRpdG9yJTIyJTNBJTIyaW50ZXJmYWNlJTIwQXJyYXklM0NUJTNFJTIwJTdCJTVDbiUyMCUyMCUyMCUyMHRvVXBwZXJDYXNlKHRoaXMlM0ElMjBzdHJpbmclNUIlNUQpJTNBJTIwc3RyaW5nJTVCJTVEJTNCJTVDbiU3RCU1Q24lNUNuaWYlMjAodHlwZW9mJTIwQXJyYXkucHJvdG90eXBlLnRvVXBwZXJDYXNlJTIwISUzRCUzRCUyMCdmdW5jdGlvbicpJTIwJTdCJTVDbiUyMCUyMCUyMCUyMEFycmF5LnByb3RvdHlwZS50b1VwcGVyQ2FzZSUyMCUzRCUyMGZ1bmN0aW9uJTIwKCklMjAlN0IlNUNuJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwdGhpcy5tYXAocyUyMCUzRCUzRSUyMHMudG9VcHBlckNhc2UoKSklM0IlNUNuJTIwJTIwJTIwJTIwJTdEJTNCJTVDbiU3RCU1Q24lNUNuJTVCMSUyQyUyMDIlMkMlMjAzJTVELnRvVXBwZXJDYXNlKCklM0IlNUNuJTVDbiU1QidhJTJDJyUyQyUyMCdiJyUyQyUyMCdjJyU1RC50b1VwcGVyQ2FzZSgpJTNCJTIyJTJDJTIyb3B0aW9ucyUyMiUzQSU3QiUyMmNvbXBpbGVyT3B0aW9ucyUyMiUzQSU3QiUyMm5vSW1wbGljaXRBbnklMjIlM0F0cnVlJTJDJTIyc3RyaWN0TnVsbENoZWNrcyUyMiUzQXRydWUlMkMlMjJub0ltcGxpY2l0UmV0dXJucyUyMiUzQXRydWUlMkMlMjJub0ltcGxpY2l0VGhpcyUyMiUzQXRydWUlMkMlMjJyZW1vdmVDb21tZW50cyUyMiUzQWZhbHNlJTJDJTIyZXhwZXJpbWVudGFsRGVjb3JhdG9ycyUyMiUzQWZhbHNlJTJDJTIyZW1pdERlY29yYXRvck1ldGFkYXRhJTIyJTNBZmFsc2UlMkMlMjJhbGxvd05vblRzRXh0ZW5zaW9ucyUyMiUzQXRydWUlMkMlMjJ0YXJnZXQlMjIlM0ElMjI0JTIyJTdEJTJDJTIyd2luZG93T3B0aW9ucyUyMiUzQSU3QiUyMmNvbnNvbGUlMjIlM0F0cnVlJTdEJTdEJTdE

我们可以看到,如果我们在错误类型的数组上调用此函数,TypeScript 将引发错误

[1, 2, 3].toUpperCase(); // Error

['a,', 'b', 'c'].toUpperCase(); // OK

请注意,如果您位于模块上下文中,则可以将声明部分包装在declare global block.

把它放在一起:

// array-augmentations.ts

interface Array<T> {
  toUpperCase(this: string[]): string[];
}

if (typeof Array.prototype.toUpperCase !== 
'function') {
  Array.prototype.toUpperCase = function () {
    return this.map(c => c.toUpperCase());
  };
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

typescript 扩展数组原型 的相关文章

  • 尝试使用 Javascript 解决对称差异

    我正在尝试找出对称的解决方案 使用 javascript 完成以下任务的差异 目标 接受未指定数量的数组作为参数 保留数组中数字的原始顺序 不删除单个数组中数字的重复项 删除数组中出现的重复项 因此 例如 如果输入是 1 1 2 6 2 3
  • 类函数/变量在使用之前是否必须声明?

    所以我在学习课程时偶然发现了一些对我来说相当尴尬的事情 class Nebla public int test printout return x void printout printout2 private int x y void p
  • 格式化多维数组 Python

    如何编写代码来更改多维数组中每个单独数组的值a出现负值后立即归零 所以里面的第二个数组a有负值 12 34 5 6 88 10 30 75 10 会将其所有值及其后的值转为零 将数组变成 12 34 5 6 88 0 0 0 我怎样才能获得
  • 如何将一个变量的字符串分配给另一变量?

    这是我在这个网站上的第一个问题 如何将一个变量的字符串分配给另一变量 我在这里做错了什么 include
  • Pygame - 使用 SurfArray 将某种颜色的像素重新着色为另一种颜色(数组切片问题)

    我正在尝试为游戏制作调色板交换功能 并且正在尝试找到一种将某种颜色的像素颜色更改为另一种颜色的方法 我已经能够使用我在教程中找到的这个函数使所有像素具有相同的颜色 def color surface self surface red gre
  • 调整ArrayBuffer的大小

    如果我想创建一个数组缓冲区 我会写 var buff new ArrayBuffer size 但是如何调整现有缓冲区的大小呢 我的意思是 在缓冲区末尾添加更多字节 ArrayBuffer 本身没有设置 有set https develop
  • 删除二维数组C++[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 这两种释放二维数组的方法是否相似 int M new int 5 for int i 0 i lt 5 i M i new int 3 fo
  • 避免在 ES6 的函数内定位 this 的对象作用域

    例如 我正在使用 D3 js 运行一个项目 导入特定模块并调用它们的函数 Setup TypeScript ES6 导入特定的 D3 组件 角6 我有一个对象 在本例中是一个角度指令 并在 SVG 画布上绘制一些圆圈 并希望它们在拖动事件上
  • 类型“void”不可分配给类型“((event:MouseEvent) => void) |不明确的'

    import as React from react import App css import PageTwo from components PageTwo export interface IPropsk data Array
  • 在 Angular 中使用 Vue 组件

    我有一个用 Vue 构建的项目 我想在 Angular 应用程序中重用 Vue 应用程序中的组件 这样我就不必从头开始重建每个组件 我在medium上看到了这个教程 如何在 Angular 应用程序中使用 Vue 2 0 组件 https
  • 在 C 中通过引用传递数组

    我是 C 新手 我有一个疑问 由于 C 函数创建其参数的本地副本 我想知道为什么以下代码按预期工作 void function int array array 0 4 array 1 5 array 2 6 int main int arr
  • Turbo C 阵列问题

    我只是想问一些关于我的代码的事情 define LIM 40 main int day 0 float temp LIM clrscr do printf Enter temperature for day d day scanf f te
  • 从零开始的 numpy 形状意味着什么

    好的 我发现数组的形状中可以包含 0 对于将 0 作为唯一维度的情况 这对我来说是有意义的 它是一个空数组 np zeros 0 但如果你有这样的情况 np zeros 0 100 让我很困惑 为什么这么定义呢 据我所知 这只是表达空数组的
  • 如何在 Angular 4 项目中使用 ActiveXObject

    我正在尝试使用 ActiveXObject 如下所示 getActiveXObject pdfCtrl return new ActiveXObject pdfCtrl checkPDF let plugin null if this ge
  • 使用 json_encode() 函数在 PHP 数组中生成 JSON 键值对

    我正在尝试以特定语法获取 JSON 输出 这是我的代码 ss array 1 jpg 2 jpg dates array eu gt 59 99 us gt 39 99 array1 array name gt game1 publishe
  • JavaScript 中数组的 HTML 数据列表值

    我有一个简单的程序 它必须从服务器上的文本文件中获取值 然后将数据列表填充为输入文本字段中的选择 为此 我想要采取的第一步是我想知道如何动态地将 JavaScript 数组用作数据列表选项 我的代码是
  • 打字稿 - 字符串'不可分配给类型'FC

    我收到以下错误 Type props PropsWithChildren lt amount number gt gt string is not assignable to type FC lt amount number gt Type
  • 结构体指针的动态数组

    我必须使用以下代码块来完成学校作业 严格不进行任何修改 typedef struct char firstName char lastName int id float mark pStudentRecord pStudentRecord
  • 在 Javascript 中减少/分组数组

    基于this https stackoverflow com a 40774906 3254598例如 我想以稍微不同的方式按对象进行分组 结果应该如下 key audi items make audi model r8 year 2012
  • 如何在打字稿文件中导入没有定义文件的js库

    随着我们的项目变得越来越大 我想从 JavaScript 切换到 TypeScript 以帮助进行代码管理 然而 我们使用许多库作为 amd 模块 我们不想将其转换为 TypeScript 我们仍然想将它们导入 TypeScript 文件

随机推荐

  • CKEditor 不需要的字符

    如何禁用 CKEditor 每次都获取我的信息 nbsp 当我不想要它们时 我正在使用 CKEditor 和 jQuery 适配器 我不想有任何 nbsp tags 经过一些研究后 我可能会对这个问题有所了解 不幸的是没有现成的解决方案 在
  • NPM 警告“无存储库字段”,但我没有存储库

    我在家里使用node js 没有存储库 只是闲逛 但当我跑步时npm 安装 我得到无存储库字段如本文中讨论的警告其他问题线索 https stackoverflow com questions 16827858 npm warn packa
  • 实体框架与多个表/实体的并发

    我了解如何使乐观并发与实体框架一起用于单个表 但是如果我想在多个表之间实现乐观并发 情况又如何呢 为了说明我的意思 我将使用一个例子 车桌 轮表 汽车外键 每辆车多个轮子 当服务人员从汽车上添加 删除车轮时 如何管理并发性 在 Car 中添
  • android:如何从strings.xml中的字符串数组获取项目的属性

    我爸爸喜欢看他的电影 而且他有很多电影 他将光盘存放在多个活页夹中 但根本没有编目系统 我想我应该制作一个 Android 应用程序来帮助他找到它们 所以我认为 id 将信息存储在 strings xml 中的字符串数组中
  • 抄书UVa Online Judge动态规划解决方案

    我可以解决使用二分查找法 因为它很容易实现 但我刚刚开始解决动态规划问题 我想知道该问题的动态规划解决方案 在书籍印刷发明之前 制作书籍非常困难 一本书的副本 所有的内容都必须由手写重写 所以 称为抄写员 抄写员收到了一本书 经过几次之后
  • 从 proguard 中排除软件包

    在 proguard cfg 中排除父包后 如何包含一些包 Ex keep com myapp 我希望混淆 com myapp data 您可以使用 ProGuard 风格的正则表达式作为类名 keep class com myapp da
  • Google 电子表格 - 从下拉项填充行

    我正在为我兄弟的建筑公司创建一个 Google 文档电子表格 这是为了帮助他提供潜在工作的报价 这样他就可以控制成本 我有三张表 报价 设置 产品 报价将包含实际的逐项报价 设置将包含一些静态值 例如增值税 产品包含产品的实际成本 即木材
  • 从条目具有不同长度的字典创建数据框

    假设我有一本包含 10 个键值对的字典 每个条目都包含一个numpy array 然而 该长度array对他们来说并不相同 我如何创建一个数据框每列持有不同的条目 当我尝试时 import pandas as pd import numpy
  • 如何将 Hibernate 代理转换为真实的实体对象

    冬眠期间Session 我正在加载一些对象 其中一些由于延迟加载而作为代理加载 一切都好 我不想关闭延迟加载 但后来我需要通过 RPC 将一些对象 实际上是一个对象 发送到 GWT 客户端 而这个具体对象恰好是一个代理 所以我需要把它变成一
  • 在生产模式下收到“用户'root'@'localhost'访问被拒绝(使用密码:NO)”并且没有记录错误

    我部署了 Rails 应用程序 但所有页面上都出现 500 错误 我的 Production log 没有显示任何内容 这是一个问题 但我做了一个 脚本 控制台生产 并尝试运行一个简单的查询 User find first 它抛出了这个 A
  • 2条正态曲线的交点

    虽然我认为这是一个基本问题 但我似乎无法找出如何在 R 中计算它 2 个或多个正态分布 拟合在直方图上 的交点 我需要 x 值 例如具有以下参数 d data frame mod c 1 2 mean c 14 16 sd c 0 9 0
  • 有没有办法仅针对其副作用来应用重构脚本?

    我有一个库已更改为引入工厂方法来替换构造函数 原因现在并不重要 在当前情况下主要是为了改进类型推断 假设有is一个 Eclipse 重构脚本 所以我几乎有一个很好的计算机可读的更改描述 有什么方法可以apply该脚本仅适用于项目uses那个
  • IE8 - 带有 margin-top 的容器:10px 没有边距

    编辑 这只发生在 IE8 中 在 IE7 Firefox Opera 等中工作正常 首先 这是我在 Photoshop 中制作的一张图片来演示我的问题 http richardknop com pict jpg http richardkn
  • 调整 2D numpy 数组的大小(不包括 NaN)

    我正在尝试调整给定因子的 2D numpy 数组的大小 从而在输出中获得更小的数组 该数组是从图像文件中读取的 其中一些值应该是 NaN 不是数字 来自 numpy 的 np nan 它是卫星遥感测量的结果 只是没有测量 一些像素 我为此找
  • Gnuplot 不同颜色

    我试图用不同的颜色为绘图和 gnuplot 中的拟合着色 但它不起作用 set ylabel s in m set xlabel t in s unset key set style line 1 lt 2 lc rgb red lw 3
  • 在 Flutter 应用程序中使用 Stripe 保持 PCI 合规性

    我正在将 Stripe 集成为支付网关 并且我正在考虑flutter stripe包装上写着 简化安全性 我们让您可以轻松收集信用卡号等敏感数据并保持 PCI 合规性 这意味着敏感数据将直接发送到 Stripe 而不是通过您的服务器 有关更
  • 当 char * 被类型定义并通过结构访问时,为什么编译器会看到 char * 和 printf 的转换说明符“s”不匹配?

    为什么编译器会抱怨以下 printf 中的参数类型 char 和转换说明符 s 不匹配 include
  • 将 MySQL 数据库拆分为单独的表

    嗯 我不是一个优秀的开发人员或数据库专家 但我对这些事情还是有一点了解的 我正在尝试使用 mysqldump 命令在 VPS 上转储数据库 该命令运行良好 但是 当我在下载转储后尝试在本地恢复时 出现超时错误 任何人都可以告诉我如何通过将数
  • 如何强制PHP/Apache再使用一年?

    因此 另一位员工交给了我一个旧项目 它的代码非常糟糕 几乎让我辞职了 两次 因为我没有那么多时间 这个任务给了我两周时间 所以我无法重写整个内容 我按照要求进行了修改 目前正在进行测试 问题是 代码应该改变它在其他年份的行为 这个问题的问题
  • typescript 扩展数组原型

    我只想使用一种方法来扩展 Array 原型 将字符串数组的每个项目转换为大写 这是我的第一种方法 Array prototype toUppercase gt map String toUppercase 为什么不工作 多谢 需要先声明该成