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

时间:2019-05-05 07:48:40

标签: typescript

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

我已将库添加到我的“ 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'方法,并且
  • string []类型具有'forEach'方法。

但是打字稿说他们没有。

1 个答案:

答案 0 :(得分:0)

您的目标是 es3,但已告诉 TS,它拥有所有可用的最前沿的库。没有 polyfills,这是一个真的坏主意。

TS 将不会在功能上polyfill。它只添加了语法 polyfill。所以你是在给自己设陷阱。删除 lib 条目,将您的目标更新为现代目标,或为其中的所有内容添加 polyfill。

另外,如上所述,我希望你的 tsconfig 是 tsconfig.json,而不是 tsconfig.jsonc。否则就是你的问题。