属性“ replaceAll”在“字符串”类型上不存在

问题描述

我想在打字稿和10号角文字中使用replaceAll,但出现此错误类型'string'上不存在属性'replaceAll'
我的代码是这样的

let date="1399/06/08"
console.log(date.replaceAll('/','_'))

输出:13990608
如何修复我的打字稿以向我展示此功能

解决方法

您应该能够通过您的 tsconfig.json 添加这些类型。 将 "ESNext.String" 添加到 lib 内的 compilerOptions

您的 tsconfig 应该如下所示:

{
    ...,"compilerOptions": {
        ...,"lib": [
          ...,"ESNext.String"
        ]
    }
}

replaceAll 方法在 lib.esnext.string.d.ts 中定义如下:

interface String {
    /**
     * Replace all instances of a substring in a string,using a regular expression or search string.
     * @param searchValue A string to search for.
     * @param replaceValue A string containing the text to replace for every successful match of searchValue in this string.
     */
    replaceAll(searchValue: string | RegExp,replaceValue: string): string;

    /**
     * Replace all instances of a substring in a string,using a regular expression or search string.
     * @param searchValue A string to search for.
     * @param replacer A function that returns the replacement text.
     */
    replaceAll(searchValue: string | RegExp,replacer: (substring: string,...args: any[]) => string): string;
}
,

您可以使用RegExp和全局标志来解决问题

"1399/06/08".replace(/\//g,"_") // "1399_06_08"
,

来自docs

截至2020年8月,Firefox支持replaceAll()方法,但 不是通过Chrome。在Chrome 85中将可用。

与此同时,您可以找到其他多种方法here

可能的未来读者的截图:

enter image description here

,

您可以创建一个文件

myOwnTypes.d.ts

在你的 angular 项目的根目录添加以下代码:

interface String {
    replaceAll(input: string,output : string): any;
}

这将告诉打字稿字符串具有此属性。

现在 replaceAll 在 Chrome 和 Firefox 中受支持,但检查 caniuse 以检查它是否满足您的需求总是好的。

https://caniuse.com/?search=replaceAll

如果这对您有用的话,我非常欢迎您点赞,我从这个 stackoverflow 帐户开始,并感谢您的支持:)

,

只需使用此功能

    let date="1399/06/08"
    
    console.log(date.split('/').join('_'))

,

Chrome支持replaceAll,因此可以安全使用。但是打字稿仍然会产生错误,因此您可以将字符串强制转换为任意字符串,以克服该障碍。

The word reindeer occurs 2 times in the string ierndeBeCrerindAeer.
The left over word is BCA

谢谢曼苏纠正我。

,

根据 MDN 网络文档,

" 要执行全局搜索和替换,请在 正则表达式”。

所以,你可以尝试这样做:

g

这会自动用下划线替换所有正斜杠。确保还在正则表达式的末尾保留 const date="1399/06/08" const forwardSlashRegex = /(\/)/g; console.log(date.replace(forwardSlashRegex,'_')); 全局指示符,因为它允许 JS 知道您要替换所有出现正斜杠的位置。

有关使用正则表达式指标的更多信息,请参阅以下非常有用的指南:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions