繁体   English   中英

在 TypeScript 中键入具有联合类型的数组

[英]Type an Array with a Union type in TypeScript

我想将此数组与联合类型一起使用,但 TS 正确地假定它的类型是字符串:“'string' 类型的参数不可分配给 '"a" | "b"' 类型的参数。”

function doSomething(value: "a" | "b"){}

["a", "b"].map(e => doSomething(e));

有什么方法可以定义数组元素的类型吗? 如果没有,是否有另一种方法可以解决这个问题? 我不想将它投射到 map() 中。

如果定义联合类型并添加类型断言,则可以将该数组的类型限制为仅接受联合成员。

type AorB = 'a' | 'b';
const testArray: AorB[] = ['a', 'b'];

function doSomething(value: AorB) {...};


const test2: AorB[] = ['b', 'c'] // <- Errors because 'c' is not part of the union.

类型需要在某个时候从string缩小到AorB :在定义数组仅接受AorB时,使用类型保护将字符串从string正确缩小到AorB ,或者在接收 function 中。

正确答案是使用const 断言

function doSomething(value: "a" | "b"){}

(["a", "b"] as const).map(e => doSomething(e));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM