[英]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.