ts类型里面如何写嵌套类型?

type A = 'a' | 'b' | 'c'
type B = `${A},${A},${A}`
let q:B = 'a,b,c'

我这样写虽然通过了。但是 类型B限制了长度为3.我希望能注明长度不受限。

使用场景,后端发到前端的数据用逗号做分隔号,长度未知。希望在 string.split(',')后直接拿到类型A[]

阅读 2.3k
2 个回答

我不确定这个是否符合你的预期,因为你的code 实际是一个Combination

type Split<S extends string, SEP extends string> = string extends S
  ? string[]
  : S extends `${infer A}${SEP}${infer B}`
    ? [A, ...(B extends "" ? [] : Split<B, SEP>)]
    : SEP extends ""
      ? []
      : [S]

 type B = Split<'a,b,c', ','>

自定义的string类型就是要给定明确的内容,长度不限肯定是做不到的,因为string类型无法循环引用自身。
这种场景与其搞一个复杂的类型来说明,不如写两行注释来得清晰。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进