首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Typescript告诉我类型'string‘上不存在属性'padStart’。为什么?

Typescript告诉我类型'string‘上不存在属性'padStart’。为什么?
EN

Stack Overflow用户
提问于 2018-09-12 18:27:33
回答 2查看 18.7K关注 0票数 31

当我输入chrome dev工具时:

代码语言:javascript
复制
"1".padStart(2,0)

我得到了

代码语言:javascript
复制
"01"

但是当我写的时候

代码语言:javascript
复制
"1".padStart(2,0)

在我的typescript项目中

我得到了

代码语言:javascript
复制
Property 'padStart' does not exist on type 'string'.

为什么Typescript会抱怨?我该如何解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-12 18:33:01

padStart是在ES2017标准中定义的。您需要告诉typescript使用适当的类型(用于ES2017的类型)。如果您的运行时支持ES2017所需的所有语言特性,则可以通过将目标设置为ES2017来实现这一点(在编写本文时,情况可能并非如此)。

另一种选择是只设置libs选项,以便根据ES2017获得运行时对象的类型,但仍然向下编译到目标语言版本。(请注意,运行时本身需要支持padStart,typescript将不提供任何多边形填充)

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

代码语言:javascript
复制
"compilerOptions": {
    "target": "es2016",
    "lib": [
        "es2017",
        "dom"
        "scripthost"
    ],
    // ...

}

您可以在这个answer中阅读更多关于lib vs target的内容。

票数 47
EN

Stack Overflow用户

发布于 2018-11-16 22:32:45

要使TypeScript能够识别String.prototype.padStart(),您需要在tsconfig.json的库列表中指定es2017。如果你这样做了,那么TypeScript将假设所有的ES2017特性都可以使用,而这可能不是你想要的。

像Node.js这样的平台并不总是实现新的ECMAScript语言规范的完整特性集,所以只添加您确信存在的语言特性会更安全。如果您不确定目标平台支持哪些功能,可以在node.greenMDNs browser compatibility list等页面上查找。

padStart函数是字符串原型的一部分,因此只需在tsconfig.json中添加es2017.string就足够了

代码语言:javascript
复制
{
  "compilerOptions": {
    "lib": ["es6", "es2017.string"],
    ...
  },
}
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52293010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档