解构数组时的类型

时间:2015-08-10 15:39:16

标签: arrays types typescript destructuring

function f([a,b,c]) {
  // this works but a,b and c are any
}

它有可能写出类似的内容吗?

function f([a: number,b: number,c: number]) {
  // being a, b and c typed as number 
}

5 个答案:

答案 0 :(得分:42)

这是在参数列表中解构数组的正确语法:

function f([a,b,c]: [number, number, number]) {

}

答案 1 :(得分:10)

是的,确实如此。在TypeScript中,您可以通过简单的方式使用数组类型创建元组。

type StringKeyValuePair = [string, string];

您可以通过命名数组来执行您想要的操作:

function f(xs: [number, number, number]) {}

但你不会为内部参数命名。 另一种可能性是成对使用解构:

function f([a,b,c]: [number, number, number]) {}

答案 2 :(得分:6)

使用TypeScript 4.0,元组类型现在可以提供标签

type Range = [start: number, end: number]

答案 3 :(得分:2)

我的代码如下

type Node = { 
    start: string;
    end: string;
    level: number;
};

const getNodesAndCounts = () => { 
    const nodes : Node[]; 
    const counts: number[];
    // ... code here

return [nodes, counts];
}

const [nodes, counts] = getNodesAndCounts(); // problematic line needed type

typescript在TS2349下面的行中给我错误:无法调用类型缺少调用签名的表达式;

nodes.map(x => { 
//some mapping; 
    return x;
);

更改为下面的行解决了我的问题;

const [nodes, counts] = <Node[], number[]>getNodesAndCounts();

答案 4 :(得分:2)

作为一个简单的答案,我想补充一下,您可以执行以下操作:

n