我想在typescript和angular 10中使用replaceAll
。
但是我得到了这个错误:属性'replaceAll'在类型'string'上不存在。
这是我的代码:
let date="1399/06/08"
console.log(date.replaceAll('/', '_'))
输出: 13990608
如何修复我的 TypeScript,以显示此函数?
我想在typescript和angular 10中使用replaceAll
。
但是我得到了这个错误:属性'replaceAll'在类型'string'上不存在。
这是我的代码:
let date="1399/06/08"
console.log(date.replaceAll('/', '_'))
输出: 13990608
如何修复我的 TypeScript,以显示此函数?
tsconfig.json
文件来添加这些类型支持。在 compilerOptions
中的 lib
属性中加入 "ES2021.String"
。tsconfig
文件应该类似于以下内容:{
...,
"compilerOptions": {
...,
"lib": [
...,
"ES2021.String"
]
}
}
replaceAll
方法定义在 lib.es2021.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;
}
tsconfig.json
中将 ESNext.String
添加到 lib
中。 - Josef未处理的异常发生:tsconfig.json:21:7 - error TS6046: '--lib' 选项的参数必须是:'es5'、'es6'、'es2015'等等
,并列出了很多选项,但没有 ESNext.String
,因此无法编译。 - Stack Underflownode_modules/typescript/lib
中搜索 lib.esnext.string.d.ts
文件,如果没有找到,则版本不匹配。或者更新/重新安装整个 TS。 - Joseftsconfig.json
和jsconfig.json
文件中: "lib": ["es6", "ES2021.String"]
- Ramy El-Basyouni您可以使用RegExp和全局标志解决问题。全局标志使replace
在所有出现的情况下运行。
"1399/06/08".replace(/\//g, "_") // "1399_06_08"
String.replaceAll()
方法,而不是请求解决方法。请您确认一下我的翻译是否符合要求。 - Mohammad MoallemireplaceAll()
是来自ES2021规范的。如果最新版本的TS不支持它,除了使用其他方法,你无法做太多事情。 - ruth{
...
"compilerOptions": {
"lib": ["ES2021"]
...
}
只需使用此功能
let date="1399/06/08"
console.log(date.split('/').join('_'))
您可以在 Angular 项目的根目录下创建一个文件
myOwnTypes.d.ts
并添加以下代码:
interface String {
replaceAll(input: string, output : string): any;
}
这将告诉 TypeScript 字符串具有该属性。
现在 replaceAll 在 Chrome 和 Firefox 中得到支持,但最好检查 caniuse 确定它是否符合您的需求。
https://caniuse.com/?search=replaceAll
如果对您有帮助,请点赞支持。我刚刚开始使用这个stackoverflow账号,感谢支持 :)
另一个可能的解决方案:我遇到了这个问题,但是我的tsconfig目标设置为“es2021”。原因是也有一个库被指定了。因此,通过使用lib和target,它覆盖了默认的lib。解决方案是完全删除lib或将其添加到lib选项中。
例如: "compilerOptions":{ ..."target": "ES2021" }
或者
"complierOptions":{ "target": "ES2021", "lib": [ ..., "ES2021.String" ],
{
...,
"compilerOptions": {
...,
"lib": [
...,
"esnext.string"
]
}
}
let subject = '1399/06/08';
let substring = '/';
let replacement = '_';
let newSubject = subject.replace(new RegExp(substring, 'g'), replacement);
console.log(newSubject);
tsconfig.json
的includes
部分缺少文件。通过添加我的脚本目录来更新includes
解决了问题。 - TestWell
date.split('/').join('_')
。虽然您也可以更新到 Chrome85。 - Jai