Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Typescript从元组/数字数组派生联合类型_Javascript_Typescript - Fatal编程技术网

Javascript Typescript从元组/数字数组派生联合类型

Javascript Typescript从元组/数字数组派生联合类型,javascript,typescript,Javascript,Typescript,信息量很大 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];

信息量很大

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
但是,当使用Array.keys()迭代预先准备
[0,1,…,255]
时,它将不起作用

  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
这有什么办法吗?谢谢

相关话题如下:


没有回答这个问题,现在是TypeScript2.0时代(5年多以前)

在评论中总结了一个冗长的讨论:在撰写本文时,除非您明确写出所有单个数字,否则这(实际上)是不可能的。即使这样,它也相当有限

但是,有一个开放的功能请求,可在此处找到:

这有什么办法吗


不,现在没有。

int255
属于
number[]
类型。因为
Array#keys
返回
number[]
<代码>作为常量仅对常量文本有意义。您需要显式地放置所有值,以便在编译时知道它们。@zerkms显然,这不是解决方案。我不认为需要在运行时确定
[…Array(255).keys()]
。“我不认为…需要在运行时确定”-所有函数都需要在运行时执行才能获得结果。如果您不接受将所有数字显式写入作为解决方案,那么您的问题的答案是“没有解决方案”.投票关闭此副本在逻辑上是正确的,并且您一直避免提及此内容,好像我的代码不合适或运行时确定的推理限制。事实就是打字脚本的能力。知道这一点,你一直在避免承认这一点。“现在好多了!”史密斯我回答了你问的唯一一个问题。如果你真的想问别的问题,你应该明确地问。“知道这一点,你一直在逃避承认”——对不起,这句话毫无意义。这不是别的。主题是相同的,这里是一个用户可以提供替代解决方案的地方。从0…255开始编写显然不是大多数程序员永远不会接受的解决方案。作为一个不愿意接受缺少的功能的程序员,你有一个明显的解决方案,即贡献TS或分叉它,但这两个都不是SO问题范围内的合理答案。@IngoBürk该评论也不在这里。你为什么要评论这些?您提供的唯一信息是功能请求URL。为什么你们不能简明扼要地回答“当前不可用,但有一个功能请求:URL”??