扩展 Typescript 中的内置类型

2023-11-29

我有以下结构:

project
 |- types
    |- global.d.ts
    |- string.d.ts
    |- wdio.d.ts
 |- src
    |- Models
    |- Resources
    |- Components
    |- Extensions
       |- string.ts
    |- ...
 |- tsconfig.json
 |- wdio.conf.js

我尝试用函数扩展字符串的原型。到目前为止我尝试了很多方法,我在几个网站上找到了。但无论是tsc给我错误,或者 PHPStorm 显示错误消息。

// types/string.d.ts
declare interface String {
    myCustomFn(text : string) : string;
}

// src/Extensions/string.ts
String.prototype.myCustomFn = function(text : string) : string {
    // ... Logic

    return 'myCustomFn';
};

// tsconfig.json
...
    "typeRoots": ["./types/"],

    "include": [
      "./src/**/*.ts",
      "./types"
    ]
...

// wdio.conf.js
...
before: function (capabilities, specs) {
    require('ts-node').register({ files: true });

    require('../extensions/String');
},
...

我添加了增强String类到 d.ts 文件。然后我在一个单独的文件中定义函数的主体。当我在src/Extensions/string.ts文件,该tsc命令没有给出错误消息,但 PHPStorm 显示以下错误:

TS2339: Property 'myCustomFn' does not exist on type 'String'.

而且,代码中的任何位置自动完成都会显示我的方法,甚至代码可以执行,并使用myCustomFn功能。

问题:

  • 这只是IDE的错误吗?
  • 我是否做错了什么,或者 String 类的扩展方式应该以不同的方式进行?

完整的工作示例Github

放置您的String接口随机扩展.d.ts file:

interface String {
  myCustomFn(text : string) : string;
}

添加另一个文件extension.ts在哪里添加prototype:

String.prototype.myCustomFn = function(text : string) : string {
  return 'myCustomFn';
};

然后导入extension.ts文件到你的根目录index.ts file:

import './extension';

现在您可以添加您的String().myCustomFn(text: string);你想要的任何地方。


附:重要的是你include the .d.ts文件到您的编译文件。 这typeRoots财产不是必需的。

tsconfig.json:

{
  "compilerOptions": {
    "outDir": "dist"
  },
  "include": [
    "src",
    "types" // here is the .d.ts file
  ],
  "exclude": [
    "**/node_modules"
  ]
}

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

扩展 Typescript 中的内置类型 的相关文章

  • 在 javascript/jquery 中将光标更改为等待

    当调用函数时 如何让光标更改为此加载图标以及如何将其更改回 javascript jquery 中的普通光标 在你的 jQuery 中使用 body css cursor progress 然后又恢复正常 body css cursor d
  • 使用 vscode 调试器调试 next.js

    我已经使用安装了一个项目创建下一个应用程序 https github com segmentio create next app 我需要使用我的编辑器 vscode 调试服务器端渲染 所以我访问过vscode recipes 如何调试 ne
  • TypeScript:增强内置类型

    如何增强其中一种 内置 类型 例如数组 在 JS 中 我会做类似的事情 Array prototype shuffle function TypeScript 中的等价物是什么 TypeScript 中的类型是 开放式 的 所以你可以这样写
  • 每 3 秒重复一次动画

    我正在使用 WOW js 和 animate css 现在我正在将 CSS 运行到 Infinite 我想知道如何让我的课程运行 3 秒停止并再次开始到无限 My html img src images fork png class for
  • rxjs/Subject.d.ts 错误:类“Subject”错误地扩展了基类“Observable

    我从中提取了示例模板代码本教程 https github com gopinav Angular 2 Tutorials并执行以下两个步骤来开始 npm install worked fine and created node module
  • 如何重定向到 instagram://user?username={username}

    我的 html 页面上有这个链接 可以在特定用户上打开 Instagram 应用程序 a href Link to Instagram Profile a 我一直在寻找自动运行 url instagram user username USE
  • 使用 jQuery/JS 打开时使
    标签的内容具有动画效果

    我只想要 HTML5 的内容details标记为 滑行 动画打开 而不是仅仅弹出打开 立即出现 这可以用 jQuery Javascript 实现吗 Fiddle http jsfiddle net 9h4Hq HTML
  • Meteor:应用程序无法在 0.9.1.1 版本上运行

    出现类似错误 Error TypeError undefined is not a function evaluating Template create anonymous function iron dynamic template j
  • Javascript正则表达式用于字母字符和空格? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我需要一个
  • 在requestAnimationFrame中使用clearRect不显示动画

    我正在尝试在 HTML5 画布上做一个简单的 javascript 动画 现在我的画布是分层的 这样当我收到鼠标事件时 背景层不会改变 但带有头像的顶层会移动 如果我使用 requestAnimationFrame 并且不清除屏幕 我会看到
  • 使用 KnockoutJs 映射插件进行递归模板化

    我正在尝试使用以下方法在树上进行递归模板化ko映射 插入 http knockoutjs com documentation plugins mapping html 但我无法渲染它 除非我定义separate每个级别的模板 在以下情况下
  • Meteor - 从客户端取消服务器方法

    我正在通过服务器方法执行数据库计数 用户可以选择他们希望如何执行计数 然后调用该方法 我的问题是 计数可能需要一些时间 并且用户可能会在方法运行时改变主意并请求不同的计数 有什么方法可以取消调用的方法并运行新的计数吗 我认为 this un
  • 在javascript中解析json - 长数字被四舍五入

    我需要解析一个包含长数字的 json 在 java servlet 中生成 问题是长数字被四舍五入 当执行这段代码时 var s x 6855337641038665531 var obj JSON parse s alert obj x
  • 如何使输入字段和提交按钮变灰

    我想变灰这两件事 http doorsplit heroku com 歌曲输入字段和提交按钮 直到用户输入艺术家 有没有一种简单的方法可以通过 JQuery 来做到这一点 艺术家输入字段的id是 request artist 你可以这样做
  • HTML 离线应用程序缓存,列出下载的文件

    作为我正在构建的离线 Web 应用程序的加载屏幕的一部分 使用缓存清单 http developer apple com library safari documentation iPhone Conceptual SafariJSData
  • 如何循环 Record

    I have Records类型Record https www typescriptlang org docs handbook utility types html recordkt export interface List name
  • 为什么 jquery 没有检测到单选按钮未被选中的情况? [复制]

    这个问题在这里已经有答案了 可能的重复 JQuery radioButton change 在取消选择期间不会触发 https stackoverflow com questions 5176803 jquery radiobutton c
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 在 React.js 中编辑丰富的数据结构

    我正在尝试为数据结构创建一个简单的基于网格的编辑器 但我在使用 React js 时遇到了一些概念问题 他们的文档对此没有太大帮助 所以我希望这里有人可以提供帮助 首先 将状态从外部组件传输到内部组件的正确方法是什么 是否有可能将内部组件中
  • 使用 Ajax 请求作为源数据的 Jquery 自动完成搜索

    我想做的事 我想使用 jquery 自动完成函数创建一个输入文本字段 该函数从跨域curl 请求获取源数据 结果应该与此示例完全相同 CSS 在这里并不重要 http abload de img jquerydblf5 png http a

随机推荐

  • 无法加载 Rails 样式表中的语义 UI。解析值时出现很多错误

    我正在开发一个使用 Semantic UI 作为前端框架的 Rails 应用程序 我正在使用 Rails 5 我按照该网站上的说明进行操作 https github com Semantic Org Semantic UI Rails LE
  • 如何使用谷歌应用程序脚本洗牌每隔一列?

    如果 C 是 4 我想使用 google apps 脚本随机化 D E F G H I J K At the moment I use this inefficient time consuming code function shuffl
  • 使用多个命令的 Python paramiko 模块

    我有一个创建连接的类 我可以在通道关闭之前连接并执行 1 个命令 在另一个系统上 我可以执行多个命令 并且通道不会关闭 显然 这是我尝试连接的系统的配置问题 class connect newconnection def init self
  • Linux下如何给进程分配更多内存

    我正在 64 位 Fedora 16 上使用 CAD 程序 有一次该程序突然崩溃并完全退出 我最初的猜测是没有足够的内存可供该程序执行该操作 并且它退出了 为了测试它 我想为该特定程序分配更多内存 这样做时 如果其他程序没有足够的内存 我也
  • 处理“大量”数据时的 WinForms UI 响应能力

    我正在修改一个 Windows 窗体 以允许在后台加载数据 同时 UI 保持响应 数据的检索和绑定都需要相当长的时间 理想情况下 我会在后台执行这两项操作 但是对于我应该在后台执行哪种 UI 更新 如在主线程之外 存在一些模糊性 一个在后台
  • C++ 中的字符串没有越界异常/错误吗? [复制]

    这个问题在这里已经有答案了 string p a cout lt
  • 从 asp.net core api 添加用户声明到 firebase auth

    给定一个 asp net core api 和仅使用 Authorize 属性的工作 firebase 身份验证 如何将自定义声明添加到令牌以使用 Authorize Policy admin 管理 SDK 仅适用于 Node js Jav
  • 创建一种通过网络发送整数的有效方法。传输控制协议

    如何将整数值转换为字节数组 然后通过字节流将它们发送到客户端程序 客户端程序将字节数组转换回整数 我的程序是乒乓球游戏 运行后 它会创建一个服务器 客户端使用对象流通过互联网连接到该服务器现在 一切都运转良好 但似乎效率不高 我的意思是 当
  • 如何检查 Javascript 数组中是否存在多个值

    所以 我正在使用 Jquery 并有两个具有多个值的数组 我想检查是否all第一个数组中的值存在于第二个数组中 例如 例1 数组 A 包含以下值 34 78 89 数组 B 包含以下值 78 67 34 99 56 89 这将返回true
  • 带有伪元素之前的 Z 索引

    我创建了一个带有 before pseudo 元素的 header 元素 伪元素必须位于父元素后面 一切都工作得很好 直到我给我的 标题 一个 z 索引 我想要的 前景中的黄色 标题 背景中的红色伪元素以及黄色 标题 元素上的简单 z 索引
  • 对 IText 7 中的所有 PDF 页面使用单一模板

    我有以下内容PDF模板这对于所有的应该是一致的pages添加到我正在创建的 PDF 中 问题是 我只得到这个模板Page 1仅适用于其余页面空白模板已使用 这是现在正在使用的代码 PdfDocument pdfDoc new PdfDocu
  • 在 Java 中对从数据库检索的一小部分数据执行连接操作。 (上下文:网络应用程序)

    在 Web 应用程序的上下文中 是否适合在 Java 中对从数据库检索的数据 从第一个查询 执行一些 JOIN 操作 并使用该 JOIN 数据进行第二个也是最后一个数据库查询以获得所需的数据 Java 是否为此类实现提供任何内置机制 或者实
  • Laravel 5.2 通过 API 进行身份验证

    我正在使用 Laravel 5 2 开发 RESTful API 在令牌守卫中位于 Illuminate Auth TokenGuard TokenGuard php在第 46 行 标记的列名称定义为api token this gt st
  • Selenium 测试在本地工作但在 Jenkins 中失败

    在工作中 我们为我们的一个应用程序提供了一个自动化套件 该套件设置为在每次提交到 master 部署到产品时运行 并且很长一段时间以来 我们一直在尝试使其足够可靠 测试在 Jenkins 中运行 使用 Selenium webDriver
  • 如何在 Android Canvas 上制作路径动画

    是否可以将动画师附加到路径上 还有其他方法可以在画布上绘制动画线条吗 我在发布之前搜索过此内容 但找不到任何内容 在另外两篇文章中在 Android 的 Canvas 上绘制路径作为动画 and 如何在 Android Canvas 上用动
  • 使用JS或Jquery读取css比例值

    我有这个div div div 我如何获得 transform scale x y 使用 JS 或 jQuery 的元素 id css transform 给我矩阵 但我需要元素的实际比例值 或者 如果我无法直接获得比例 那么将矩阵 转换为
  • Fortran 中不区分大小写的字符串比较

    尽管 Fortran 不区分大小写 但我观察到使用以下命令比较字符串时情况并非如此if查看 当然 用户应该意识到这一点 然而 Fortran 不区分大小写 我潜意识里希望同样适用于字符串检查 实现不区分大小写的字符串比较的有效方法是什么 这
  • ld 在 OSX Leopard 上找不到 X11 库

    我有一个在 Linux 上运行的非常基本的 X11 应用程序 我试图在 OSX 10 5 8 下编译它 我已经安装了X11和X11 SDK 并修改了makefile如下 CFLAGS L usr X11 lib I usr X11 incl
  • 如何从DataFrame中获取Array[Seq[String]]?

    如何通过DataFrame cc into Array Seq String val factors ccCols split val cc dataset select factors head factors tail 我尝试过这种方式
  • 扩展 Typescript 中的内置类型

    我有以下结构 project types global d ts string d ts wdio d ts src Models Resources Components Extensions string ts tsconfig jso