示例:
type X = 'a' | 'b'; const xVals = ??? X; // ['a', 'b']
或者反过来(从所有可能值的列表中获取一个类型,该类型是数组中所有值的并集)。
jyztefdp1#
你不能从一个类型到一个值,你可以从一个值开始,你可以得到类型,问题是数组值['a', 'b']会被类型化为string[],字符串类型的并集会丢失。使用函数强制编译器为指定值推断字符串类型的解决方案:
['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'
g2ieeal72#
作为@Titian答案中stringTuple函数的替代解决方案,从TypeScript 3.4开始,您可以使用constAssert:
stringTuple
const
const xValues = ['a', 'b'] as const; // type: readonly ["a", "b"] type X = typeof xValues[number]; // type: "a" | "b"
2条答案
按热度按时间jyztefdp1#
你不能从一个类型到一个值,你可以从一个值开始,你可以得到类型,问题是数组值
['a', 'b']
会被类型化为string[]
,字符串类型的并集会丢失。使用函数强制编译器为指定值推断字符串类型的解决方案:
g2ieeal72#
作为@Titian答案中
stringTuple
函数的替代解决方案,从TypeScript 3.4开始,您可以使用const
Assert: