【问题标题】:How to convert array of strings "variable" to typescript types?如何将字符串“变量”数组转换为打字稿类型?
【发布时间】:2019-01-27 16:06:34
【问题描述】:

我想知道如何将字符串变量数组转换为类型脚本类型。

注意:已经有两个 SO 答案可以解决这个问题,但字符串是通过硬编码传递的,以保持字符串的值不变。

两个答案都传递了一个内联数组,以将数组中的字符串值作为文字保存。 但是当你将数组作为变量传递时,它就不起作用了。

行内传递值。

但是将值作为变量传递是行不通的

问题

那么如何创建一个类型来将domElements 中允许的字符串值列表作为变量限制为asLiterals

【问题讨论】:

    标签: arrays typescript


    【解决方案1】:

    当一个数组字面量被赋值给一个变量时,它会被加宽以匹配典型的行为。

    因此,变量 domElements 的类型为 string[] 而不是 ('a' | 'div' | ...)[]

    答案在您自己的代码中。使用与 asLiterals() 类似的函数来创建文字数组。

    export function literalArray<T extends KeyTypes>(...entries: T[]): T[] {
        return entries
    }
    

    您也可以在 type-plus 库中找到此函数。

    【讨论】:

    • 感谢@unional 关于扩大的类型行为。我在安装type-plus 后尝试使用literalArray,但DOMType 仍被识别为stringimgur.com/a/uwQcF8Y。 (codesandbox.io/s/7j15z1o856) 我会错过什么?
    • 加宽后,没有自动缩小的方法。即,您必须将其内联。你的domElementsarr 是一样的。只是类型不同。
    • 感谢您的澄清?。我将内联代码作为我图书馆的最后手段。
    猜你喜欢
    • 2020-05-08
    • 2019-06-05
    • 1970-01-01
    • 2023-02-10
    • 1970-01-01
    • 2020-08-15
    • 2022-01-03
    • 2018-07-04
    • 1970-01-01
    相关资源
    最近更新 更多