105
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 
}
4

5 回答 5

161

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

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

}
于 2015-08-10T17:02:29.503 回答
13

是的。在 TypeScript 中,您可以通过一种简单的方式来处理数组类型,即创建元组。

type StringKeyValuePair = [string, string];

你可以通过命名数组来做你想做的事:

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

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

function f([a,b,c]: [number, number, number]) {}
于 2015-08-10T19:47:37.957 回答
9

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

type Range = [start: number, end: number]
于 2020-06-30T21:50:25.837 回答
5

我的代码如下

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();
于 2020-06-03T13:24:14.663 回答
3

作为一个简单的答案,我想补充一点,您可以这样做:

function f([a,b,c]: number[]) {}
于 2020-08-22T16:14:09.687 回答