我有这个功能:
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));
我收到此错误:
有谁知道如何缓解这种情况?
我试过这个,我得到一个更长,更疯狂的错误:
function proc(unames: Array<string | ReadonlyArray<string>>){}
然而,这使错误消失了:
function proc(unames: Array<string | ReadonlyArray<any>>){}
不确定发生了什么。
答案 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.1和2015 (6th edition)之间,内置.concat()
的行为已更改为支持单个值(通过检测可扩展)。
目前,TypeScript正在验证.concat()
的5.1或更早版本。