尝试构造可能长度为2的数组时出错

时间:2017-03-31 01:13:07

标签: javascript typescript ecmascript-6 destructuring

我正在尝试构造一个长度为2的数组,但是我得到了一个打字稿错误:

[ts] Tuple type '[string]' with length '1' cannot be assigned
to tuple with length '2'.
    let output = {status: false};
    if(execute.permission) {
        let message: [string] = execute.params;
        if(message.length >= 2) {
            // Destructuring follows
            [output['position'], output['message']] = message;
        }
    }

如何告诉打字稿,数组的长度可能是2?

3 个答案:

答案 0 :(得分:5)

使用if (componentType == CHANGE_ORDER_TYPE) { if (!this.props.data) { return null; } else { const changeList = this.props.data.map(function (result) { return (result.change_orders); }); let changeOrdersArr = []; for (let i = 0; i < changeList.length; i++) { let inner = changeList[i]; for (let z = 0; z < inner.length; z++) { changeOrdersArr.push(inner[z]) } } (任意长度的数组)代替string[]"tuple"限制为长度1)作为您的类型。

元组具有特定长度,可以更轻松地表示分配给特定索引位置的多个类型,例如[string]。同源(单一类型)元组在某些情况下仍然有用(例如在地图中表示对),但不常见。

另一方面,

数组是可变长度的列表,但设计为仅保存单个类型的引用(即使该类型是联合类型或[string, number])。如果任何数组的一个索引可以保持某个值,则每个索引都可以保存相同类型的值。

<小时/>

TypeScript代码(Playground Link

any

答案 1 :(得分:4)

您尚未将message声明为数组;您已将其声明为元组([string]),元组具有固定数量的元素。 (请参阅Basic Types文档中的元组部分。)

你可以将它声明为一个有两个字符串元素([string, string])的元组,但是考虑到你正在测试message.length >= 2,你似乎有意将它声明为一个字符串数组({{1 }}):

string[]

答案 2 :(得分:0)

尝试更改message变量的类型。字符串数组比单字符串数组

更适合
let message: string[] = execute.params;