【问题标题】:How to create an array of zeros in typescript?如何在打字稿中创建一个零数组?
【发布时间】:2015-06-29 10:06:41
【问题描述】:

目前,我正在使用 Array.apply(null, new Array(10)).map(Number.prototype.valueOf, 0); 创建一个 0 数组。

我想知道在打字稿中是否有更好(更清洁)的方法?

【问题讨论】:

  • 在普通的 JS 中你可以做类似Array(10).fill(0).
  • 或类型化数组之一,例如。 G。 Int32Array(10) 如果仅与数字有关。
  • @Xufox *使用 polyfill,但绝对是最好的方法。

标签: javascript arrays typescript


【解决方案1】:

回顾了阵列孔的概念后,我会这样做:

Array.apply(null, new Array(10)).map(()=> 0);

节省不多,但也有一些。

【讨论】:

    【解决方案2】:

    您可以添加到打开的Array<T> 接口以使fill 方法可用。如果您想要旧版浏览器支持,可以使用polyfill for Array.prototype.fill on MDN

    interface Array<T> {
        fill(value: T): Array<T>;
    }
    
    var arr = Array<number>(10).fill(0);
    

    View on Playground

    最终fill 方法将进入lib.d.ts 文件,您可以删除您的文件(当您需要这样做时编译器会警告您)。

    【讨论】:

      【解决方案3】:

      您可以将整数参数传递给 Array 构造函数,这将返回一个新的 JavaScript 数组,其长度属性设置为该数字,此外,您可以使用 .fill 从索引零开始填充数组的所有元素。

      const data = ([...Array(10).fill(0)])
      console.log(data)

      【讨论】:

        【解决方案4】:

        现在你可以做

        const a = new Array<number>(1000).fill(0);
        

        确保包含&lt;number&gt;,否则它会将a 的类型推断为any[]

        【讨论】:

        • 这快把我逼疯了。它在最新的打字稿编译器中失败。% tsc --version Version 3.9.2 % cat ./fill.ts const a = new Array&lt;number&gt;(1000).fill(0); % tsc ./fill.ts fill.ts:1:35 - error TS2339: Property 'fill' does not exist on type 'number[]'. 1 const a = new Array&lt;number&gt;(1000).fill(0);
        • 您可能需要更改tsconfig.json 中的target 设置。
        • 没错。 Array.fill 是 ES6,所以 target 必须指定 ES6。谢谢你的提示!
        猜你喜欢
        • 2020-09-28
        • 2022-12-22
        • 2014-10-08
        • 2021-03-11
        • 1970-01-01
        • 2019-06-21
        • 1970-01-01
        • 2020-06-20
        • 1970-01-01
        相关资源
        最近更新 更多