无法将字符串数组传递给函数

时间:2018-03-15 03:34:51

标签: node.js typescript lodash typescript2.0 tsc

我有这个功能:

function proc(unames: Array<string>){}

我试着通过它:

  import _ = require('lodash');

  const usernames = _.flattenDeep([unames]).filter(function (item, index, arr) {
     return item && arr.indexOf(item) === index;
  });

  const recipient = 'foobarbaz';
  proc(usernames.concat(recipient));

我收到此错误:

enter image description here

有谁知道如何缓解这种情况?

我试过这个,我得到一个更长,更疯狂的错误:

function proc(unames: Array<string | ReadonlyArray<string>>){}
然而,这使错误消失了:

function proc(unames: Array<string | ReadonlyArray<any>>){}

不确定发生了什么。

1 个答案:

答案 0 :(得分:2)

警告似乎指的是使用.concat()而不是proc()

Array上调用时,例如usernames,TypeScript正在验证提供给.concat()的参数也是Array

要解决此警告,您有以下几种选择:

  • 由于您正在使用Lodash,因此其自己的_.concat()允许附加单个值,而TypeScript的验证应该知道:

    const recipient = 'foobarbaz';
    proc(_.concat(usernames, recipient));
    
  • recipient定义为Array或在致电.concat()时将其换行:

    const recipient = [ 'foobarbaz' ];
    proc(usernames.concat(recipient));
    
    const recipient = 'foobarbaz';
    proc(usernames.concat( [recipient] ));
    
  • 您也可以配置TypeScript以验证更高版本的ECMAScript。在标准的5.12015 (6th edition)之间,内置.concat()的行为已更改为支持单个值(通过检测可扩展)。

    目前,TypeScript正在验证.concat()的5.1或更早版本。