Typescript模板文字将数组转换为列表

Typescript模板文字将数组转换为列表,typescript,Typescript,我有一个数组: const arr = ['a', 'b', 'c'] 我想转换成逗号分隔的列表-'a,b,c'。是否有任何方法可以使用新功能转换其类型 以下是您的解决方案: 常量arr=['a','b','c']作为常量; 类型Arr=类型Arr; 类型Elem=string 类型映射器< Arr扩展了ReadonlyArray, 结果扩展字符串= >=Arr扩展[] ? 后果 :Arr扩展[推断H] ? H扩展元素 ? `${Result},${H}` :从不 :Arr扩展只读[推断H,

我有一个数组:

 const arr = ['a', 'b', 'c']
我想转换成逗号分隔的列表-'a,b,c'。是否有任何方法可以使用新功能转换其类型

以下是您的解决方案:

常量arr=['a','b','c']作为常量; 类型Arr=类型Arr; 类型Elem=string 类型映射器< Arr扩展了ReadonlyArray, 结果扩展字符串= >=Arr扩展[] ? 后果 :Arr扩展[推断H] ? H扩展元素 ? `${Result},${H}` :从不 :Arr扩展只读[推断H,…推断尾部] ? 尾巴延伸到只读光线 ? H扩展元素 ? 结果如何?制图员:制图员 :从不 :从不 :从不; 类型结果=映射器

你可以找到更多有趣的例子

另外,请记住,它不是100%类型安全的,因为我使用了casting操作符作为

以下是您的解决方案:

常量arr=['a','b','c']作为常量; 类型Arr=类型Arr; 类型Elem=string 类型映射器< Arr扩展了ReadonlyArray, 结果扩展字符串= >=Arr扩展[] ? 后果 :Arr扩展[推断H] ? H扩展元素 ? `${Result},${H}` :从不 :Arr扩展只读[推断H,…推断尾部] ? 尾巴延伸到只读光线 ? H扩展元素 ? 结果如何?制图员:制图员 :从不 :从不 :从不; 类型结果=映射器

你可以找到更多有趣的例子

另外,请记住,它不是100%类型安全的,因为我使用了casting操作符作为

我已经更新了示例以扩展ReadOnlyRay接口。 这是一个近似避免强制转换语句

const list = ['a', 'b', 'c'] as const;

type Join<
  List extends ReadonlyArray<string>,
  Seperator extends string = ',',
  Joined extends string = ''
  > = List extends []
  ? Joined
  : List extends [infer Head]
  ? Head extends string
  ? `${Joined}${Seperator}${Head}`
  : never
  : List extends readonly [infer Head, ...infer Tail]
  ? Tail extends ReadonlyArray<string>
  ? Head extends string
  ? Joined extends '' ? Join<Tail, Seperator, `${Joined}${Head}`> : Join<Tail, Seperator, `${Joined}${Seperator}${Head}`>
  : never
  : never
  : never;

interface ReadonlyArray<T extends string> {
  join<Separator extends string, This extends ReadonlyArray<T>>(this: This, separator: Separator): Join<This, Separator>
}

const joined = list.join(',')
我已将示例更新为扩展ReadonlyArray接口。 这是一个近似避免强制转换语句

const list = ['a', 'b', 'c'] as const;

type Join<
  List extends ReadonlyArray<string>,
  Seperator extends string = ',',
  Joined extends string = ''
  > = List extends []
  ? Joined
  : List extends [infer Head]
  ? Head extends string
  ? `${Joined}${Seperator}${Head}`
  : never
  : List extends readonly [infer Head, ...infer Tail]
  ? Tail extends ReadonlyArray<string>
  ? Head extends string
  ? Joined extends '' ? Join<Tail, Seperator, `${Joined}${Head}`> : Join<Tail, Seperator, `${Joined}${Seperator}${Head}`>
  : never
  : never
  : never;

interface ReadonlyArray<T extends string> {
  join<Separator extends string, This extends ReadonlyArray<T>>(this: This, separator: Separator): Join<This, Separator>
}

const joined = list.join(',')

你是什么意思?这是一个典型的问题。我希望列表变量按我写的那样键入。我对它进行了上选,不明白为什么它是下选的。你是什么意思?这是一个典型的问题。我希望列表变量按我写的那样键入。我对它进行了上选,不明白为什么会被下选