gpt4 book ai didi

typescript - 在 TypeScript 3.8 中扩展字符串

转载 作者:行者123 更新时间:2023-12-04 10:10:44 24 4
gpt4 key购买 nike

我想要的是扩展 String原型(prototype)添加一个.trimSlashes()从字符串的任一端删除斜线的方法;我不能让它进行就地替换(而不是要求返回一个字符串,只需在调用时更改自己的字符串),但这将是另一个问题。

我正在使用 TypeScript 3.8.3 版。

所以我有这个 trimSlashes.ts 文件:

import * as fs from "fs";

interface String {
trimSlashes(this: string) : string;
}

String.prototype.trimSlashes = function (this : string) : string {
var str = this;
if (str.startsWith("/")) {
str = str.replace(/^\/+/, "")
}
if (str.endsWith("/")) {
str = str.replace(/\/+$/, "");
}

return str;
}

let test = "//myTest/";

console.log("Original string: " + test);
test.trimSlashes();

console.log("Trimmed slashes: " + test);

console.log("File or directory exists: " + fs.existsSync(test));

我添加了 fs上下文,因为它需要触发编译器停止解析并提示 Property 'trimSlashes' does not exist on type 'String'. 的错误。 .没有 fs代码,它在 NodeJS 上构建和运行。

补充笔记

有几个这样的问题,但似乎没有人要求 3.8 版,而且我能找到的所有答案都不适用。

我尝试创建一个单独的 .d.ts 文件,将其包含在源代码中,现在我正在尝试我认为最简单的方法:在一个文件中声明所有内容。我不介意拥有 .d.ts如果需要文件,但我无法让它工作。

最佳答案

我相信添加 import * as fs from 'fs'强制编译器将该文件视为模块。当这种情况发生时,Typescript 会意识到在一个更大的程序中存在一个可能受此文件影响的全局范围,并且不会让全局原型(prototype)困惑,除非你告诉它你真的打算这样做。

要显式修改全局接口(interface),请使用 declare global .

declare global {
interface String {
trimSlashes(this: string): string;
}
}

Playground

我会把它放在 string.d.ts在我项目的根目录中。 typescript 应该选择它并允许该方法。只要确保在任何可能使用它的代码之前导入将该函数添加到实际原型(prototype)的文件,否则您仍然会遇到运行时错误。

关于typescript - 在 TypeScript 3.8 中扩展字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61351657/

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