字符串类型上不存在属性 'replace'

11

我遇到了一个奇怪的错误TS2339:属性“X”在类型“Y”上不存在。我该如何解决?

我已经将库添加到我的“tsconfig.jsonc”文件中:

"compilerOptions": {
    "target": "es3", // "es3" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */,
    "watch": true,
    "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */,
    "lib": [
      "esnext",
      "es2018",
      "es2017",
      "es2016",
      "es2015",
      "es7",
      "es6",
      "es5",
      "dom",
      "dom.iterable",
      "ScriptHost"
    ] /* Specify library files to be included in the compilation. */,
...
}


代码
const userName: string = groupAddress.replace('@gmail.com', '')

返回错误。

类型“string”上不存在属性“replace”。

同样地,

const addMembers = (email: string, studio: string, role): void => {
  const memberKey = email.trim()

返回

类型“string”上不存在属性“trim”。

  const groupKeys: string[] = [
    `report.${name}@gmail.com`,
    `support.${name}@gmail.com`
  ]
  groupKeys.forEach((groupKey: string) => {
    if (!GroupsApp.getGroupByEmail(groupKey).hasUser(memberKey)) {
      AdminDirectory.Members.insert({ email: memberKey, role }, groupKey)
    }
  })

返回

类型'{}'上不存在属性'forEach'。

我期望

  • 字符串类型具有'replace'方法,以及
  • 字符串数组类型具有'forEach'方法。

但typescript表示它们没有。


1
你的目标是ES3。所有这些方法在此版本中不存在。 - haim770
@haim770 - 眼力不错!但是 ES3 实际上确实在字符串上有 replace 方法(它是在该版本中添加的)。 - T.J. Crowder
将“tsconfig.jsonc”更改为“tsconfig.json”。 - hoangdv
@T.J.Crowder,显然你是对的。这可能是另一个配置问题... - haim770
尝试使用空字符串初始化您想要应用这些方法的字符串类型变量,使用空数组初始化数组类型变量。 - anymeshsingh
1个回答

1
您正在针对es3进行目标设置,但已告诉TS它拥有最新的库。如果没有填充,这是一个非常糟糕的想法。TS不会进行功能性填充,它只添加语法填充。因此,您正在为自己设置陷阱。删除库条目,将目标更新为现代目标,或添加所有内容的填充。另外,如提到的,希望您的tsconfig是tsconfig.json,而不是tsconfig.jsonc。否则,那就是您的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接