假设我有一个像这样的工会
type Colors = 'red' | 'blue' | 'pink'
有没有可能根据这个并集对数组进行类型检查,并确保数组包含所有类型?
即:
const colors: UnionToTuple<Colors> = ['red', 'blue'] // type error, missing 'pink'
const colors: UnionToTuple<Colors> = ['red', 'blue', 'pink'] // no error
假设我有一个像这样的工会
type Colors = 'red' | 'blue' | 'pink'
有没有可能根据这个并集对数组进行类型检查,并确保数组包含所有类型?
即:
const colors: UnionToTuple<Colors> = ['red', 'blue'] // type error, missing 'pink'
const colors: UnionToTuple<Colors> = ['red', 'blue', 'pink'] // no error
2条答案
按热度按时间5hcedyr01#
借鉴this答案的思路,您可以创建一个函数,通过使用所传递数组的类型参数T进行类型检查。将其键入为
T extends Colors[]
以确保数组的每一项都在Colors
中,还将其键入为[Colors] extends [T[number]] ? unknown : 'Invalid'
以确保Colors类型的每一项都在所传递数组中:更一般地说,将它 Package 在另一个函数中,以便可以传递和使用联合类型的类型参数:
wgx48brx2#
扩展确定性性能的答案,对于广义函数,您可以编写工厂