Typescript derive union type from tuple/array values
非常有用。
const list = ['a', 'b', 'c'] as const; // TS3.4 syntax
type NeededUnionType = typeof list[number]; // 'a'|'b'|'c';
现在,我尝试制作一种具有以下特征的整数 范围(0 ... 255)。
对于初始测试,手动准备[0,1,2,3]
后,它会按预期工作。
const int3 = [0, 1, 2, 3] as const;
type Int3 = typeof int3[number];
// 0 | 1 | 2 | 3
const a: Int3 = 3; //ok, but error on >=4
但是,当[0,1,..,255]
与Array.keys()迭代进行预配对时,它将无法工作...
const int255 = [...Array(255).keys()] as const; // [0,1,..,255]
type Int255 = typeof int255[number];
const colorCode: Int255 = 300; //ok to compile,should be error
对此有任何解决方法吗?谢谢。
此处的相关主题:
Is it possible to restrict number to a certain range
没有回答这个问题,它是TypeScript2.0年龄(超过5年)
答案 0 :(得分:2)
总结评论中的冗长讨论:在撰写本文时,(实际上)除非您明确列出所有数字,否则这是不可能的。即便如此,它还是相当有限的。
但是,对此有一个开放功能请求,可以在这里找到:https://github.com/microsoft/TypeScript/issues/15480
答案 1 :(得分:-1)
对此有任何解决办法吗?
不,暂时不。