解构数组时的类型


73
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 
}

1
我需要不同的数据类型
thr0w

Answers:


122

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

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

}

1
尽管此代码可以回答问题,但提供有关此代码为何和/或如何回答问题的其他上下文,可以改善其长期价值。
2015年

如果所有参数都属于同一类型,可以缩短此语法吗?f([a,b,c]:[number]){...}行中的内容
filipbarak

3
@filipbarakf([a, b, c]: number[])
Michael Mrozek '19

11

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

type StringKeyValuePair = [string, string];

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

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

但是您不会命名interal参数。另一种可能是按使用对销毁:

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

6

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

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

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

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

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

将行更改为下面可以解决我的问题;

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.