代码之家  ›  专栏  ›  技术社区  ›  user1283776

Typescript告诉我类型“string”上不存在属性“padStart”。为什么?

  •  12
  • user1283776  · 技术社区  · 6 年前

    当我输入chrome开发工具时:

    "1".padStart(2,0)
    

    我明白了

    "01"
    

    但是当我写的时候

    在我的typescript项目中

    我明白了

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

    3 回复  |  直到 6 年前
        1
  •  40
  •   Volodymyr Myshko    5 年前

    padStart 定义在 ES2017 ES2017年 ). 您可以通过将目标设置为 ES2017年 ,如果运行时支持 (在撰写本文时,情况可能并非如此)。

    另一个选择是设置 libs 选项,以便根据 ES2017年 但是仍然要编译到您要针对的任何语言版本 ,typescript将不提供任何多边形填充)

    你可以在家里做这个 tsconfig 使用 lib

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

    answer

        2
  •  7
  •   Cerberus    6 年前

    TypeScript默认情况下假定您传输的代码将在最差的环境中运行(我希望现在是最差的环境),即在仅支持ES5的浏览器中运行。 String.prototype.padStart is an experimental feature 仅在ES2017中受支持,因此TypeScript无法确定在运行时它是否已准备就绪。

    如果您知道这个“最坏情况”不会出现(您不是针对旧的浏览器,或者正在使用polyfill),您可以对 tsconfig.json

    1. 改变你的目标。这将迫使您的消费者拥有ES2017(或更新的)运行时,但不需要您自己付出更多的努力。在这种情况下,设置 target: "es2017" .

    2. 更改可用库的列表。在这种情况下,如果您不确定您的客户机是否足够现代化,则必须为您使用的ES2017元素提供polyfill。在这种情况下,添加 "es2017" 到中的数组 lib 参数(如果为空,则为 lib: ["es2017"] ).

        3
  •  7
  •   Benny Code    6 年前

    String.prototype.padStart() ,您需要指定 es2017 tsconfig.json

    node.green MDNs browser compatibility list .

    这个 padStart 函数是字符串原型的一部分,因此只需添加 es2017.string tsconfig.json文件

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