字符串上的打字稿条件类型包括

时间:2021-06-08 11:55:03

标签: typescript typescript-typings template-literals

我想输入一个函数,它接受一个字符串作为输入,如果字符串包含'[]',则返回一个列表,否则返回一个对象。类似的东西:

function func<T = any>(query: string): typeof query extends `${any}[]${any}` ? Array<T> : T {
  if (query.includes('[]')) {
    return [] as T[]
  }
  return {} as T
}

除了它不起作用外,函数返回类型只是字符串。

我使用的是最新的打字稿版本 (4.3.2)。

你能帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

你只能用类型参数来做到这一点,而不是真正的函数参数:

function func<S extends string, T = any>(): S extends `${infer A}[]${infer B}` ? Array<T> : T {

}
const testFun = func<'a[]b'>();
const testFun2 = func<'ab'>();