Typescript告诉我属性'padStart'在'string'类型中不存在。为什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (808)

当我输入chrome dev工具时:

"1".padStart(2,0)

我明白了

"01"

但是当我写作

"1".padStart(2,0)

在我的打字稿项目中

我明白了

Property 'padStart' does not exist on type 'string'.

为什么Typescript会抱怨?我该如何解决?

提问于
用户回答回答于

padStartES2017标准中定义。你需要告诉typescript使用适当的类型(那些ES2017)。ES2017如果运行时支持所需的所有语言功能ES2017(在撰写本文时可能不是这种情况),则可以通过将目标设置为来执行此操作。

另一种选择是设置libs选项以便根据情况获得运行时对象的类型,ES2017但仍然可以编译为您所针对的任何语言版本。(注意,运行时本身需要支持padStart,typescript不会提供任何poly-fill )

您可以tsconfig使用以下lib选项执行此操作:

"compilerOptions": {
    "target": "es2016",
    "lib": [
        "es2017",
        "dom"
        "scripthost"
    ],
    // ...

}

您可以在此答案中阅读有关lib vs target的更多信息

用户回答回答于

要使TypeScript知道String.prototype.padStart(),您需要es2017在您的库中的库列表中指定tsconfig.json。如果您这样做,那么TypeScript将假定可以使用所有可能不是您想要的ES2017功能。

像Node.js这样的平台并不总是实现新的ECMAScript语言规范的完整功能集,因此只在您确信它们存在的地方添加语言功能更安全。如果您不确定目标平台支持哪些功能,可以在node.greenMDNs 浏览器兼容性列表等页面上查找

padStart功能是字符串原型的一部分,所以它足以只需添加es2017.string在您tsconfig.json

{
  "compilerOptions": {
    "lib": ["es6", "es2017.string"],
    ...
  },
}

扫码关注云+社区

领取腾讯云代金券