首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Typescript从数字元组/数组派生联合类型

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

Stack Overflow用户
提问于 2020-10-02 04:47:07
回答 2查看 127关注 0票数 0

Typescript derive union type from tuple/array values

是非常有用的。

代码语言:javascript
复制
const list = ['a', 'b', 'c'] as const; // TS3.4 syntax
type NeededUnionType = typeof list[number]; // 'a'|'b'|'c';

现在,我尝试创建一个范围为(0...255)的Integer类型。

对于初始测试,当手动准备[0,1,2,3]时,它会按预期工作。

代码语言:javascript
复制
  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]时,它将无法工作...

代码语言:javascript
复制
  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年前)

EN

回答 2

Stack Overflow用户

发布于 2020-10-02 05:28:12

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

然而,有一个开放的功能请求,可以在这里找到:https://github.com/microsoft/TypeScript/issues/15480

票数 2
EN

Stack Overflow用户

发布于 2020-10-02 06:01:16

有没有解决这个问题的办法?

不,现在不是。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64162970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档