typescript 如何将一个联合类型的所有可能的值获取到一个数组中(或者相反)?

knsnq2tg  于 2023-02-13  发布在  TypeScript
关注(0)|答案(2)|浏览(179)

示例:

type X = 'a' | 'b';
const xVals = ??? X; // ['a', 'b']

或者反过来(从所有可能值的列表中获取一个类型,该类型是数组中所有值的并集)。

    • 我的目标是将所有可能的值只列出一次。**
jyztefdp

jyztefdp1#

你不能从一个类型到一个值,你可以从一个值开始,你可以得到类型,问题是数组值['a', 'b']会被类型化为string[],字符串类型的并集会丢失。
使用函数强制编译器为指定值推断字符串类型的解决方案:

function stringTuple<T extends [string] | string[]>(...data: T): T {
    return data;
}

let xValues = stringTuple('a', 'b') // typed as ["a", "b"]
type x = typeof xValues[number] // 'a' | 'b'
g2ieeal7

g2ieeal72#

作为@Titian答案中stringTuple函数的替代解决方案,从TypeScript 3.4开始,您可以使用constAssert:

const xValues = ['a', 'b'] as const; // type: readonly ["a", "b"]
type X = typeof xValues[number]; // type: "a" | "b"

相关问题