【问题标题】:Convert number type to corresponding string one将数字类型转换为对应的字符串一
【发布时间】:2019-10-26 02:04:21
【问题描述】:

我有一些具体数字的类型,例如

type Num = 42;

现在我想进行通用转换

type NumberToString<N> = ... // N as string instead of number

这样

type A = NumberToString<Num>; // "42"
type B = NumberToString<1>;   // "1"

如何编写这样的转换器?

【问题讨论】:

    标签: typescript generics


    【解决方案1】:

    我认为这对于任意数字是不可能的。有一个 open issue 表面上致力于在类型系统中进行数学运算,但据我所知,那里没有发生任何事情。

    如果您可以将其限制为“合理”范围内的非负整数,您可以在某处声明一个巨大的元组,然后这样做:

    type HugeTuple = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0]; // as long as you need
    type NumToStr<N extends number> = { [K in keyof HugeTuple]: K }[N];
    
    type One = NumToStr<1>; // "1"
    type TwoOrFortyTwo = NumToStr<2 | 42> // "2" | "42"
    

    所以,呃,你去吧。祝你好运!

    Link to code

    【讨论】:

    • 我实际上是在尝试从您的答案中验证元组的元组,因此为此再硬编码一个元组似乎不是一个好主意:)
    • 您可以使用任何元组,甚至是来自另一个问题的元组,例如this
    • 顺便说一句,另一种方式是i.stack.imgur.com/Xs0LR.png,但如果我错过了最后一个元组中的零和键列表中该元组的索引,就会出现问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2018-08-16
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多